-1

我有一个 info_gain 类的对象列表。看起来像这样:(像结构一样使用它):

class info_gain 
        {
            public string words;
            public double ig;
        };

List <info_gain> InfoGain = new List<info_gain>(); 

现在我想按属性 ig 的降序对列表中的这些对象进行排序。我用过的

var result = from element in InfoGain
                    orderby element.ig descending
                          select element;

现在我应该如何遍历这个 var 中的每个对象导致一个 for 循环?

注意:我之前从未使用过 Linq,因此排序语句可能不正确。

4

3 回答 3

4

您应该使用foreach而不是for

foreach(var item in result)
{
    // use item here
}

或者如果你真的需要使用for,你可以ToArray先调用,来获取一个数组而不是IEnumerable

var resultArray = result.ToArray();
for(int i = 0; i < resultArray.Length; i++)
{
    var item = resultArray[i];
    // use item here
}

但我会去foreach

更新

要仅遍历X集合中的第一项,请使用Take扩展方法:

foreach(var item in result.Take(5))
{
    // use item here
}
于 2013-10-31T16:50:11.807 回答
3

使用 foreach 循环遍历 LINQ 查询的结果:

foreach(var info in result)
  // use info.words or info.ig

顺便说一句,您可以使用 lambda 语法使查询更紧凑:

var result = InfoGain.OrderByDescending(element => element.ig);

要仅获取前几个元素,请使用Take运算符:

var result = InfoGain.OrderByDescending(element => element.ig).Take(5);

此外,您始终可以将查询结果放入新列表并像使用任何其他列表一样使用它:

var gains = InfoGain.OrderByDescending(element => element.ig).ToList();
于 2013-10-31T16:49:03.253 回答
0
var result =
    from element in InfoGain
    orderby element.ig descending
    select element;

foreach (var element in result)
{
    //stuff
}

或者,更简洁地说,

foreach (var element in InfoGain.OrderByDescending(element => element.ig))
{
    //stuff
}

但是,Linq 的好处是您通常不需要显式迭代。你会在循环体中做什么?使用 Linq 方法可以消除显式迭代。

于 2013-10-31T16:52:47.557 回答