2016-04-10 5 views
0

最初とMin(ない)同じ
最終マックス(ないソートは
AAA
BBB
でのforeachで たSortedSet第MIN())と同じ

同じではありません CCC
^^

MIN()
^^

MAX()
cc

Min()はどのようにして最初に同じものを得ることができますか?
Max()と最後の値を同じにするにはどうすればよいですか?

ss.FirstOrDefault()は等しいss.Min()
ss.Reverse()ではありませんFirstOrDefault()等しいss.Max()

public void SS() 
{ 
    SortedSet<string> ss = new SortedSet<string>(StringComparer.OrdinalIgnoreCase); 
    ss.Add("bbb"); 
    ss.Add("aaa");    
    ss.Add("^^"); 
    ss.Add("ccc"); 
    foreach (string s in ss) 
     Debug.WriteLine(s); 
    Debug.WriteLine(ss.Min()); 
    Debug.WriteLine(ss.Max());     
} 

答えて

3

ss.Minおよびss.Maxプロパティ(メソッドではありません)を使用します。

+0

'ss.Min'インスタンスプロパティを使用すると、' SortedSet 'の構造体に関して最小の要素が見つかるため、そのセットによって運ばれる比較者を尊重します。しかし、 'ss.Min()' LINQ拡張メソッドを使うと、ソートされた構造体に関するすべてを忘れてしまい、単にデフォルトの比較元( 'Comparer .Default')に関して最小要素を見つけて、' StringComparer.CurrentCulture '。 "ordinal ignore case"では、 'a'(U + 0061)は'^'(U + 005E)より_less_である' A'(U + 0041)のように扱われます。あなたの文化では、文字は '^'よりも_greater_です。 –

0

短い答えはないです。あなたができます't。

長い回答はMin実装のhereです。

数値を比較していない場合、コードにはComparer<TSource>.Defaultが使用されますが、これはSortedSetで使用していることが保証されていません(場合によってはそうではありません)。

ところで、MinとFirstを同じにしたい場合は、セットを作成するときにコンコンマーを指定しないでください。自動的にdafaultが使用されます。

+0

しかし、私はその比較が欲しいです。最小値と最大値のプロパティ(メソッドではない)が機能しているようです。 – Paparazzi

関連する問題