トップページ > プログラム > 2015年03月23日 > 0n8ws3su

書き込み順位&時間帯一覧

28 位/153 ID中時間01234567891011121314151617181920212223Total
書き込み数0001001000000000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net

書き込みレス一覧

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拡張メソッドを使ってラムダ式渡して済ませる事もできる


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。