首页 > 解决方案 > 元组与 GroupBy

问题描述

我有一个Tuple<string,string>

在这个元组中,我可以拥有这个:

"<GOOD>10</GOOD>","5"
"<GOOD>TEST</GOOD>","8"
"<GOOD>TEMP</GOOD>","5"
"<GOOD>CAT</GOOD>","7"
"<GOOD>DOG</GOOD>","7"

我想将元组的所有第一项分组并将其放在字典中:

"5","<GOOD>10</GOOD><GOOD>TEMP</GOOD>"
"8","<GOOD>TEST</GOOD>"
"7","<GOOD>CAT</GOOD><GOOD>DOG</GOOD>"

我怎样才能做到这一点?

标签: c#linq

解决方案


ATuple<T1,T2>只能有一项 forT1和一项 for T2。假设您有一个集合Tuple<string, string>您可以使用以下内容:

var dict = tuples.GroupBy(t => t.Item2)
                 .ToDictionary(g => g.Key, g => string.Concat(g.Select(t => t.Item1)));

这是一个完整的例子:

var tuples = new List<Tuple<string, string>>();

tuples.Add(Tuple.Create("<GOOD>10</GOOD>", "5"));
tuples.Add(Tuple.Create("<GOOD>TEST</GOOD>", "8"));
tuples.Add(Tuple.Create("<GOOD>TEMP</GOOD>", "5"));
tuples.Add(Tuple.Create("<GOOD>CAT</GOOD>", "7"));
tuples.Add(Tuple.Create("<GOOD>DOG</GOOD>", "7"));

var dict = tuples.GroupBy(t => t.Item2)
                 .ToDictionary(g => g.Key, g => string.Concat(g.Select(t => t.Item1)));

在线尝试

请注意,这也适用于ValueTuples。这是一个例子


推荐阅读