static void Main(string[] args) { int[] array = new int[] { 102, 12, 23, 412, 22, 14, 45, 65, 33 }; var obj = from item in array orderby item ascending group item by item / 100; //var obj = array.Where(item => item > 100); /* foreach (var item in obj) { Console.WriteLine(item.ToString()); } */ return; }
无聊随便写Linq玩,突然发现这个问题,找了很多地方都不得答案,不知有哪位大牛能作下解答。
请看上面这段代码,理想状态下,obj结果应该是:
{0:[12,14,22,23,33,45,65]
1:[102]
4:[412]}
实际结果:
{0:[12,14,22,23,33,45,65,0]
1:[102]
4:[412]}
也就是说0分组最后多个0,但是这个0不在原数组array中定义,它是怎么出现的?
可能只是一个优化机制,看到的数组只是一个容器,默认值是0,长度按照 2 º,2¹,2 ²,......增长计算
谢谢。我修改数组测试下
int[] array = new int[] { 102, 12, 23, 412, 22,111,156, 14, 45, 65, 33,88 };
这次
{0:[12,14,22,23,33,45,65,88]
1:[102,111,156,0]
4:[412]}
应该是像你所说那样长度按照 2 º,2¹,2 ²,......增长计算。
长知识了,谢谢。
foreach (var item in obj)
{
foreach (var t in item)
{
Console.Write(t+"\t");
}
Console.WriteLine();
}
没有你说的0……
谢谢你的尝试,请不要这么打印 ,有些字符是打印不出来的,请监视下,0分组里确实8个元素,最后一个0.
你ToList之后就是7个。没有最后那个0,而且你看count属性也是7。
嗯,是的,确实如您所说。
但是我想搞明白,分成三组,为什么只有0分组里末尾自动加了个0,1、4分组末尾没有加0。Linq使用这种机制是为什么?可以解决什么样的问题或者特殊情况?
我只是想更明白一点。
@小尧弟: 表示长知识了,呵呵~