2016-04-10 2 views
0

Первый и Min() не совпадают
Последний и Max() не являются одинаковымиSortedSet первый и Min() не являются одинаковыми

В Еогеасп сортировка
ааа
ГЭБ
ссс
^^

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 '. При «порядковом игнорировании» символ 'a' (U + 0061) обрабатывается как' A' (U + 0041), который равен _^_ (U + 005E). В вашей культуре буквы _greater_, чем '^'. –

0

Короткий ответ:. Вы можете «т.

Более длинный ответ заключается в реализации Мин, here.

Если вы не сравниваете цифры, код будет использовать Comparer<TSource>.Default, который не гарантированно будет тем, который вы используете в SortedSet (и в вашем случае нет).

BTW, если вы хотите, чтобы Min и First были одинаковыми, не указывайте компаратор при создании набора. Он будет автоматически использовать dafault.

+0

Но я действительно хочу это сравнение. Кажется, что работают свойства Min и Max (не метод). – Paparazzi

 Смежные вопросы

  • Нет связанных вопросов^_^