LINQ更改本地"let"变量
本文关键字:quot let 变量 LINQ | 更新日期: 2023-09-27 18:12:50
使用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
我相信你正在寻找折叠(又名"减少"),这是在LINQ中被称为聚合。
(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
快乐编码。
看起来你只是选择了最小值。
var minimum = collection.Min( c => c );
如果集合中存在最小值,则可以有效地找到最小值:
int? best = null;
if (collection != null && collection.Length > 0) best = collection.Min();