我有一个3大小的元组列表 - 其中两个是数据,一个是该数据的'值'。
我想获得符合某些总值的最高价值元素。
答案 0 :(得分:1)
您可以在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;
}