我有一个问题,我试图找出如何在完成数组分组后打印出值。
我已经想出如何打印出“对象”的键,但是如何打印出值?
我知道它应该看起来像{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);
}
}
返回的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
值是项目本身。只是用
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);
}
}
}
像其他人一样,我会建议做同样的事情,除非我确保你不需要使用item.ToList()
或item.Select(...)
(对于string.Join
)。
由qqxswpoi生产的IGrouping<TKey, TElement>
生产一种带有GroupBy
属性的IEnumerable<TElement>
。因此,该项目本身是可迭代的。您可以在TKey Key
或其他任何地方使用它。另外,要在调试中查看结果,您不需要转换。
我还要补充一点,string.Join(sep, collection)
或ToAnyOther可变集合不是你想要的,因为它是关于违反概念,恕我直言。
好吧,只需迭代你拥有的项目。