C# 列表中元组的聚合、总和和乘积
我有一个元组列表: 我需要的Linq查询规则必须满足以下要求:我需要按字符串值对元组进行分组,但前提是至少出现两次。分组元素的聚合应该是乘法。毕竟,我需要聚合元素的总和。在上面的例子中,结果是25*10+5*7=285 到目前为止,我已经尝试了以下几项:C# 列表中元组的聚合、总和和乘积,c#,linq,C#,Linq,我有一个元组列表: 我需要的Linq查询规则必须满足以下要求:我需要按字符串值对元组进行分组,但前提是至少出现两次。分组元素的聚合应该是乘法。毕竟,我需要聚合元素的总和。在上面的例子中,结果是25*10+5*7=285 到目前为止,我已经尝试了以下几项: var query = from tuple in firstTupleList.Concat(secondTupleList) group tuple.Item2 by tuple.It
var query = from tuple in firstTupleList.Concat(secondTupleList)
group tuple.Item2 by tuple.Item1 into g
select Tuple.Create(g.Key, g.Aggregate((x, y) => x * y));
这是狗和猫的乘法运算,但rat仍然在列表中,这是错误的。您应该能够做到:
var grouped = list.GroupBy(t => t.Item1)
.Where(g => g.Count() > 1)
.Select(g => Tuple.Create(g.Key, g.Skip(1).Aggregate(g.First().Item2, (i,j) => i*j.Item2)))
.ToList();
var total = grouped.Sum(i => i.Item2);
给你:
List<Tuple<string, int>> list = new List<Tuple<string, int>>();
list.Add(Tuple.Create<string, int>("dog", 25));
list.Add(Tuple.Create<string, int>("dog", 10));
list.Add(Tuple.Create<string, int>("cat", 5));
list.Add(Tuple.Create<string, int>("cat", 7));
list.Add(Tuple.Create<string, int>("other", 4));
Dictionary<string, int> dic = list.
GroupBy(t => t.Item1).
Where(grp => grp.Count() > 1).
ToDictionary(grp => grp.Key,
grp => grp.Select(tuple => tuple.Item2).Aggregate((a, b) => a * b));
List List=新列表();
添加(Tuple.Create(“dog”,25));
添加(Tuple.Create(“dog”,10));
添加(Tuple.Create(“cat”,5));
list.Add(Tuple.Create(“cat”,7));
list.Add(Tuple.Create(“other”,4));
字典dic=列表。
GroupBy(t=>t.Item1)。
其中(grp=>grp.Count()>1)。
ToDictionary(grp=>grp.Key,
grp=>grp.Select(tuple=>tuple.Item2).Aggregate((a,b)=>a*b));
好的,继续尝试。这是家庭作业吗?你试过什么?元组保证按键排序吗?不,顺序不保证。我对原始列表进行了编辑,使其更加清晰。这给了我与我的方法相同的结果。包含“other”,4的元组仍在列表中,这是错误的。如果需要,还可以删除元组创建和ToList()var result=tuples.GroupBy(x=>x.Item1)。其中(x=>x.Count()>1)。选择(g=>g.Aggregate(1,(acc,t)=>acc*t.Item2)).Sum()代码>
List<Tuple<string, int>> list = new List<Tuple<string, int>>();
list.Add(Tuple.Create<string, int>("dog", 25));
list.Add(Tuple.Create<string, int>("dog", 10));
list.Add(Tuple.Create<string, int>("cat", 5));
list.Add(Tuple.Create<string, int>("cat", 7));
list.Add(Tuple.Create<string, int>("other", 4));
Dictionary<string, int> dic = list.
GroupBy(t => t.Item1).
Where(grp => grp.Count() > 1).
ToDictionary(grp => grp.Key,
grp => grp.Select(tuple => tuple.Item2).Aggregate((a, b) => a * b));