【问题标题】:Tuple<string,string> with a GroupBy带有 GroupBy 的元组<string,string>
【发布时间】:2021-05-31 09:57:51
【问题描述】:

我有一个Tuple&lt;string,string&gt;

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

"<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


【解决方案1】:

Tuple&lt;T1,T2&gt; 只能有 T1 的一项和 T2 的一项。假设您有一个Tuple&lt;string, string&gt;集合,您可以使用以下内容:

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)));

Try it online

请注意,这也适用于 ValueTuples。这是example

【讨论】:

    【解决方案2】:

    作为GroupBy() 的替代品,您可以使用ToLookup()。它对效率并没有真正的影响,但你知道:

    public static void Main()
    {
        (string, string)[] tuples = 
        {
            ("<GOOD>10</GOOD>",   "5"),
            ("<GOOD>TEST</GOOD>", "8"),
            ("<GOOD>TEMP</GOOD>", "5"),
            ("<GOOD>CAT</GOOD>",  "7"),
            ("<GOOD>DOG</GOOD>",  "7")
        };
    
        var dict = tuples
           .ToLookup(tuple => tuple.Item2, tuple => tuple.Item1)
           .ToDictionary(tuple => tuple.Key, string.Concat);
    
        Console.WriteLine(string.Join("\n", dict));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2015-11-04
      • 1970-01-01
      相关资源
      最近更新 更多