C#: Как реализовать IOrderedEnumerable <T>

Можно использовать:

if ($(selector).is('*')) {
  // Do something
}

А мало более изящный, возможно.

13
задан River 22 October 2017 в 00:26
поделиться

1 ответ

У меня есть пример реализации , на которую вы можете посмотреть. Он никоим образом не предназначен для эффективного использования, но он должен помочь вам начать работу.

Обычно IOrderedEnumerable просто должен иметь представление о его текущем порядке, чтобы он мог создать новый. . Предполагая, что у вас уже есть IComparer , вы создаете новый, сказав что-то вроде:

int Compare(T first, T second)
{
    if (baseComparer != null)
    {
        int baseResult = baseComparer.Compare(first, second);
        if (baseResult != 0)
        {
            return baseResult;
        }
    }
    TKey firstKey = keySelector(first);
    TKey secondKey = keySelector(second);

    return comparer.Compare(firstKey, secondKey);        
}

Таким образом, вы создаете цепочку компараторов от «наименее значимых» до «наиболее значимых» . Вам также необходимо указать «нисходящий» бит, но это легко :)

В примере, приведенном выше, три различных аспекта представлены в трех разных классах, уже присутствующих в MiscUtil :

  • ReverseComparer :
12
ответ дан 2 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: