如何找到成员变量A最大的List元素,然后输出其成员变量B

本文关键字:成员 变量 元素 然后 输出 List 何找 | 更新日期: 2023-09-27 18:07:20

我有一个100元素的类对象列表。该类有2个成员变量,均为Double。我想按Class1.A对列表进行升序排序,然后在这个排序列表的指定子列表中(例如元素5到60(,输出Class1.A表示最大Class1.B.

我知道这在LINQ中应该是非常可行的,但除了在C#中运行SQL查询之外,我对LINQ还很陌生,而且我还没有找到教程/Q&A这真的帮助我完成了这项工作。

事先非常感谢。

public class Class1{
  public Double A;
  public Double B;
  public void CompareByA(Class1 C1, Class1 C2)
  { 
     return C1.A.CompareTo(C2.A);  
  }
}
public Double FindMaxAWithinSubset(List<Class1> L, int X, int Y)
{
  L.Sort(Class1.CompareByA);
  // Once L has been sorted by A, within the sublist of L with element         
  // indices between X and Y, find the element with maximum B, and output its A.
}

如何找到成员变量A最大的List元素,然后输出其成员变量B

您可以使用LINQ OrderBy,因此不需要使用Sort。首先通过属性A选择OrderBy,然后可以使用Where选择索引从X到Y的项目。

然后在属性B中OrderByDescending。这样可以使最大值为B的项目位于列表的顶部。你只需要得到First就可以得到结果。

   var result = list.OrderBy(x => x.A)
                    .Where((x, index) => index >= X && index <= Y)
                    .OrderByDescending(x => x.B)
                    .First().A;

我更喜欢使用LINQ扩展,所以我会这样做。不确定看起来像SQL的linq表达式是什么。

Double maxAValueInSubSet = L.OrderBy(x => x.A).Skip(X).Take(Y-X).Max(x => x.B).Single().A;
var result = myInstance.OrderBy(x => x.A).Skip(5).Take(55).Max(y => y.B).FirstOrDefault();

这是按双A排序,跳过前5个,取下一个55,然后选择剩余B的最大值。