使用linq从容器中选择值最高的元素,使它们加到x上

本文关键字:元素 linq 选择 使用 | 更新日期: 2023-09-27 18:01:34

我有一个3大小的元组列表—其中两个项是数据,一个是该数据的"值"。

使用linq从容器中选择值最高的元素,使它们加到x上

您可以在Linq中使用Max:

var tuples = new List<Tuple<string, string, int>>()
{
    new Tuple<string, string, int>("a.1", "a.2", 50),
    new Tuple<string, string, int>("b.1", "b.2", 70),
    new Tuple<string, string, int>("c.1", "c.2", 40),
};
var matches = GetHighestTuples(tuples, 150); // returns 50 and 70

更新:增加了一个函数来过滤元组列表,以获得小于或等于给定最大值所需的最少数量的元组,如下面的注释所述。

要做到这一点,您必须首先按第三个值降序排序,然后保持运行总数,直到达到所需的总和,同时保留原始元组值,以便一旦达到所需的运行总数,您可以转换回仅返回原始元组,如所述。

    public List<Tuple<string, string, int>> GetHighestTuples(List<Tuple<string, string, int>> tuples, int maxSum)
    {
        int runningTotal = 0;
        var results = tuples
            .OrderByDescending(t => t.Item3)
            .Select(t => new
                {
                    Item = t,
                    RunningTotal = (runningTotal += t.Item3)
                })
            .Where(t => t.RunningTotal <= maxSum)
            .Select(t => t.Item)
            .ToList();
        return results;
    }