如何在GroupBy()之后打印出值?

问题描述 投票:-1回答:3

我有一个问题,我试图找出如何在完成数组分组后打印出值。

我已经想出如何打印出“对象”的键,但是如何打印出值?

我知道它应该看起来像{key:value}:{1:[1],2:[2,2],3:[3,3],4:[4]}。

但我只能在下面的代码中打印出密钥,=> 1-,2-,3-,4-任何建议都非常感谢。

public static void figureModeOut(int[] source)
    {
      int[] numbers1 = { 1, 2, 3, 3, 2, 4 };

      var step1 = numbers1.GroupBy(x => x);

      foreach (var item in step1)
      {
        Console.WriteLine("{0} -", item.Key);
      }
}
c#
3个回答
1
投票

返回的IGrouping<TKey, TElement>(即item中的每个step1)本身就是包含任何给定IEnumerable<TElement>的值序列的TKey,所以只需在每个string.Join()上使用item打印出它的值:

foreach (var item in step1)
{
    Console.WriteLine("{0} - {1}", item.Key, string.Join(",", item));
}

输出:

1 - 1

2 - 2,2

3 - 3,3

4 - 4


0
投票

值是项目本身。只是用

item.ToList()

你会看到元素。

你可以对项目进行任何linq操作

这是完整的代码:

public static void figureModeOut(int[] source)
{
    int[] numbers1 = { 1, 2, 3, 3, 2, 4 };
    var step1 = numbers1.GroupBy(x => x);
     foreach (var item in step1)
     {
         foreach (var element in item)
         {
             Console.WriteLine("{0} - {1}", item.Key, element);
          }
     }
}

0
投票

像其他人一样,我会建议做同样的事情,除非我确保你不需要使用item.ToList()item.Select(...)(对于string.Join)。

由qqxswpoi生产的IGrouping<TKey, TElement>生产一种带有GroupBy属性的IEnumerable<TElement>。因此,该项目本身是可迭代的。您可以在TKey Key或其他任何地方使用它。另外,要在调试中查看结果,您不需要转换。

我还要补充一点,string.Join(sep, collection)或ToAnyOther可变集合不是你想要的,因为它是关于违反概念,恕我直言。

好吧,只需迭代你拥有的项目。

© www.soinside.com 2019 - 2024. All rights reserved.