我有一个类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;
现在我应该如何在for循环中遍历此var结果中的每个对象?
注意:我之前从未使用过Linq,因此排序语句可能不正确。
答案 0 :(得分: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
}
答案 1 :(得分:3)
使用foreach循环遍历LINQ查询的结果:
foreach(var info in result)
// use info.words or info.ig
BTW你可以使用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();
答案 2 :(得分: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方法消除显式迭代。