- C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
895 :デフォルトの名無しさん[sage]:2015/03/23(月) 03:18:10.60 ID:0n8ws3su - >>889
IEquatable<Card>を実装してEquals(Card)メソッドをoverrideする GetHashCode()メソッドもoverrideしてHashSet<Card>を使うのも良いだろう
| - C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
898 :デフォルトの名無しさん[sage]:2015/03/23(月) 06:03:14.63 ID:0n8ws3su - >>896
うっかりEquals(Card)もoverrideと書いてしまったがそっちはオーバーライドじゃなかった GetHashCodeをoverrideするのは、HashSet<T>がこのメソッドを利用して高速に要素の比較を行うから 予め取得されたハッシュコード(int)が同一だった場合のみ、等価性の評価にEquals()メソッドを呼び出す で…書いといてなんだけど、Equals(Card)がマークを考慮しない比較というのも何だし HashSet<T>を使うほどEquals(Card)が高コストでもないので、トランプ的にもIComparable<Card>で CompareTo(Card)メソッドを実装してSortedSet<Card>を使うのが良いかもしれない 要素のクラスではなくコレクションが独自にチェックする場合はIComparer<T>を作って渡す あるいはコレクションが重複を許可しないほど厳密でなくても良いとか、複数箇所で比較しないとかで List<T>のままFindIndex(Predicate<T>)や>>893みたいにLINQ拡張メソッドを使ってラムダ式渡して済ませる事もできる
|
|