我可以在IOrderedEnumerable列表中添加where子句吗?

时间:2014-04-29 13:37:23

标签: c# arrays list 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添加a子句,以便按难度为1的降序按分数排序?

3 个答案:

答案 0 :(得分:2)

假设&#34;难度&#34;是数组中的第二项:

 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缓解一些痛苦的地方,因为你没有被绑定到返回类型)

答案 1 :(得分:0)

如果您要过滤那些难度1,可以使用.Where()扩展方法,如果您想按多个字段排序,则可以使用.ThenBy()扩展方法。< / p>

答案 2 :(得分:0)

首先过滤然后订购:

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