我有一系列元素。我想从这些元素中找到最低值但它们没有属性,我必须先计算它并比较它。
我的伪代码:
int currentLowestValue = int.MaxValue;
MyObj targetElement = null;
for (int i = 0; i < elements.Length; i++)
{
MyObj ele = elements[i];
int val = ele.CalculateValue() + GetOtherValue();
if (val < currentLowestValue)
{
targetElement = ele;
currentLowestValue = val;
}
}
如何使用Linq从ele.CalculateValue() + GetOtherValue();
中选择具有最低值的元素?
答案 0 :(得分:2)
您可以使用匿名类型来存储计算结果和对象。
int otherVal = GetOtherValue(); // why you calculated it in the loop?
var lowestValObj = elements
.Select(x => new { MyObj = x, Value = x.CalculateValue() + otherVal})
.OrderBy(x => x.Value)
.First();
MyObj targetElement = lowestValObj.MyObj;
int lowestVal = lowestValObj.Value;
答案 1 :(得分:1)
基于How to use LINQ to select object with minimum or maximum property value
MyObj targetElement = elements.Aggregate((curMin, x) => (curMin == null || x.CalculateValue() < curMin.CalculateValue() ? x : curMin));
int currentLowestValue = targetElement.CalculateValue() + GetOtherValue();
由于GetOtherValue()
的值似乎是静态的(不变),因此在计算中不需要它来查找具有最小值的元素。如果此方法不是幂等的,那么您需要将其添加到循环中并将结果缓存在聚合中。