如何使用LINQ查找具有最低值的元素?

时间:2018-05-02 15:31:32

标签: c# linq

我有一系列元素。我想从这些元素中找到最低值但它们没有属性,我必须先计算它并比较它。

我的伪代码:

        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();中选择具有最低值的元素?

2 个答案:

答案 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() 的值似乎是静态的(不变),因此在计算中不需要它来查找具有最小值的元素。如果此方法不是幂等的,那么您需要将其添加到循环中并将结果缓存在聚合中。