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

时间:2019-04-28 23:01:09

标签: c#

我有一个问题,我试图弄清楚对数组进行分组后如何打印出值。

我已经弄清楚了如何打印出“对象”的键,但是如何打印出值呢?

我知道应该看起来像{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);
      }
}

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
          }
     }
}

答案 2 :(得分:0)

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

LINQ IGrouping<TKey, TElement>产生的

GroupBy产生其中具有IEnumerable<TElement>属性的TKey Key。因此,该项目本身是可迭代的。您可以在string.Join(sep, collection)中或以下方式使用它。 另外,要查看调试结果,您无需进行转换。

我还要补充一点,ToList或ToAnyOther可变集合不是您想要的,因为它是关于违法概念恕我直言的。

好吧,只需遍历您拥有的物品即可。