Могу ли я добавить предложение 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()
метод расширения.