Могу ли я добавить предложение where в список IOrderedEnumerable?

У меня есть список массивов. Каждый массив состоит из оценки и сложности. Читать в текстовом файле.

Вот так я получаю данные и упорядочиваю их по счету в порядке убывания.

// load highscores
public void LoadScores()
{
    // loop through each line in the file
    while ((line = file.ReadLine()) != null)
    {
        // seperate the score from the difficulty
        lineData = line.Split(',');

        // add each line to the list
        list.Add(lineData);
    }

    // order the list by descending order
    IOrderedEnumerable<String[]> scoresDesc = list.OrderByDescending(ld => lineData[0]);

}

Можно ли добавить пункт к IOrderedEnumerable так что он упорядочен по счету в порядке убывания, где сложность 1?

3 ответа

Решение

Предполагая, что "сложность" является вторым элементом в массиве:

 IEnumerable<String[]> scoresDesc =
     list.OrderByDescending(ld => lineData[0])
         .Where(ld => lineData[1] == 1);

Вы можете отсортировать его потом, но Where возвращает IEnumerable<T>не IOrderedEnumerable<T>так что если вам нужно, чтобы это было IOrderedEnumerable<T> тогда чище (и быстрее) сначала отфильтровать список:

 IOrderedEnumerable<String[]> scoresDesc =
     list.Where(ld => lineData[1] == 1)
         .OrderByDescending(ld => lineData[0]);

(это где var облегчает боль, так как вы не связаны с типом возврата)

Сначала фильтр, затем заказ:

list.Where(x => x.difficulty == 1).OrderByDescending(ld => lineData[0]);

Если вы хотите отфильтровать для тех, кто сложности 1, вы можете использовать .Where() метод расширения, если вы хотите отсортировать по более чем одному полю, вы можете использовать .ThenBy() метод расширения.

Другие вопросы по тегам