Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linq查询输出的奇怪顺序_Linq_C# 4.0_Group By - Fatal编程技术网

linq查询输出的奇怪顺序

linq查询输出的奇怪顺序,linq,c#-4.0,group-by,Linq,C# 4.0,Group By,我有大量的int值 int[] numbers= {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}; 我将这些数字除以模: var numberGroups=from n in numbers group n by n%5 into g select new { Remainder=g.Key, Numbers=g}; 我有这样奇怪的结果顺序: // 0, 4, 1, 3, 2 依我看来,命令应该是: //0, 4, 3, 1, 2 因为第一个可以被5除的数字是5

我有大量的int值

int[] numbers= {5, 4, 1, 3, 9, 8, 6, 7, 2, 0};
我将这些数字除以模:

 var numberGroups=from n in numbers group n by n%5  into g select new { Remainder=g.Key, Numbers=g};
我有这样奇怪的结果顺序:

  // 0, 4, 1, 3, 2
依我看来,命令应该是:

  //0, 4, 3, 1, 2
因为第一个可以被5除的数字是50

第二个可以被5除的数字是9四,

第三个可以被5除的数字是8三,

第四个可以被5除的数字是6一,

第五个可以被5除的数字是7二,

我有这样的工作小组的介绍。我错在哪里

问题:

  • linq为什么要更改订单

  • 为什么我有这么奇怪的秩序


  • 按需要的顺序添加组。这是group子句的输入顺序。如果5是第一个值,则首先创建0组。。。下面的代码示例可以看出这一点

    使用此代码:

    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    
    var numberGroups = from n in numbers group n by n % 5 into g select new { Remainder = g.Key, Numbers = g };
    
    foreach(var ng in numberGroups)
    {
        Console.Write("{0} - ", ng.Remainder);
        foreach (var v in ng.Numbers)
        {
            Console.Write(" {0}", v);
        }
        Console.WriteLine();
    }
    
    我明白了

    0 - 5 0
    4 - 4 9
    1 - 1 6
    3 - 3 8
    2 - 7 2
    
    这使得be相信在组操作上没有排序,而是按照找到的顺序收集数字,第一个数字5,结果是余数0,因此第一个输出桶为0。我们可以通过把9放在第一位来测试这一点,我们得到

    4, 0, 1, 3, 2
    
    为了证明它们按照处理顺序添加到桶中,使用这些数字

    int[] numbers = { 15, 24, 31, 43, 59, 68, 76, 87, 92, 100 };
    
    我们得到

    0 -  15 100
    4 -  24 59
    1 -  31 76
    3 -  43 68
    2 -  87 92
    
    15是添加的第一个新插槽0,24是新插槽4,31个净插槽1,43是新插槽3,59个next 4值,68个next 3插槽值,76个next 1插槽,87个next 2插槽,92个next 2插槽,100个next 0插槽

    要证明这一点,请更多地使用:

    int[] numbers = { 15, 25, 35, 45, 55, 65, 75, 85, 95, 105 };
    
    我们得到

    0 -  15 25 35 45 55 65 75 85 95 105
    

    它可能不是你想要的,但它是100%有意义的如何/为什么它发生。

    你看到的顺序是我所期望的;你为什么认为应该有所不同?我认为你对GroupBy的工作原理做出了错误的假设。你对期望顺序的解释很奇怪,所有的数字都可以除以5,只是它们不能完全分开。另外,你的模运算不是除法运算,所以你先假设数大于5是错误的。@Simeon Pilgrim,谢谢!回答这个问题,我会记下来。你是说我上面关于除法和模的评论是造成混乱的根本原因吗?所以我应该回答这个问题?是的,第一个数字是正确的。但是下一个值并不是按照它们在一个整体中所处的顺序排列的。它们完全是按照提供的顺序排列的。好的。那int[]oo={16,24,1,2,4,58,33,46,64,75}呢;如果跑完,1,4,2,3,0,你会期望什么?