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更改本地"let"变量

我相信你正在寻找折叠(又名"减少"),这是在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();