首页 新闻 搜索 专区 学院

Linq 查询结果中莫名多出一个元素0

0
悬赏园豆:5 [已解决问题] 解决于 2014-08-28 17:22
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中定义,它是怎么出现的?

小尧弟的主页 小尧弟 | 菜鸟二级 | 园豆:500
提问于:2014-08-28 15:40
< >
分享
最佳答案
1

可能只是一个优化机制,看到的数组只是一个容器,默认值是0,长度按照  2 º,2¹,2 ²,......增长计算

收获园豆:3
Qlin | 老鸟四级 |园豆:2403 | 2014-08-28 17:16

谢谢。我修改数组测试下 

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 ²,......增长计算。

长知识了,谢谢。

小尧弟 | 园豆:500 (菜鸟二级) | 2014-08-28 17:21
其他回答(2)
0

foreach (var item in obj)
{
  foreach (var t in item)
  {
    Console.Write(t+"\t");
  }
  Console.WriteLine();
}

没有你说的0……

收获园豆:1
狂狗A地板 | 园豆:121 (初学一级) | 2014-08-28 16:13

谢谢你的尝试,请不要这么打印 ,有些字符是打印不出来的,请监视下,0分组里确实8个元素,最后一个0.

支持(0) 反对(0) 小尧弟 | 园豆:500 (菜鸟二级) | 2014-08-28 16:26
0

你ToList之后就是7个。没有最后那个0,而且你看count属性也是7。

收获园豆:1
幻天芒 | 园豆:36594 (高人七级) | 2014-08-28 16:21

嗯,是的,确实如您所说。

但是我想搞明白,分成三组,为什么只有0分组里末尾自动加了个0,1、4分组末尾没有加0。Linq使用这种机制是为什么?可以解决什么样的问题或者特殊情况?

我只是想更明白一点。

支持(0) 反对(0) 小尧弟 | 园豆:500 (菜鸟二级) | 2014-08-28 16:42

@小尧弟: 表示长知识了,呵呵~

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2014-08-28 17:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册