使用LINQ查询(使用C#)我将如何做这样的事情(伪代码)?
我希望做这样的事情,例如,我可能生成1000个100的随机(有界)整数列表,我想跟踪它们生成时的最小值。
Best <- null value
Foreach N in Iterations
NewList <- List of 100 randomly generated numbers
If Best is null
Best <- NewList
If Sum(NewList) < Sum(Best)
Best <- NewList
Select Best
我尝试过各种各样的事情,但我真的无法让它发挥作用。这不是针对任何类型的项目或工作,只是为了我自己的好奇心!
我在想的例子:
let R = new Random()
let Best = Enumerable.Range(0, 100).Select(S => R.Next(-100, 100)).ToArray()
//Where this from clause is acting like a for loop
from N in Iterations
let NewList = Enumerable.Range(0, 100).Select(S => R.Next(-100, 100))
Best = (NewList.Sum() < Best.Sum())? NewList : Best;
select Best
答案 0 :(得分:2)
我相信你正在寻找fold(又名“减少”),这在LINQ中被称为Aggregate。
(IEnumerable.Min / Max是特例,但可以用fold / Aggregate来编写。)
int Max (IEnumerable<int> x) {
return x.Aggregate(int.MinValue, (prev, cur) => prev > cur ? prev : cur);
}
Max(new int[] { 1, 42, 2, 3 }); // 42
快乐的编码。
答案 1 :(得分:1)
看起来你只是选择了最小值。
var minimum = collection.Min( c => c );
答案 2 :(得分:1)
您正在有效地找到集合中的最小值(如果存在):
int? best = null;
if (collection != null && collection.Length > 0) best = collection.Min();