C# 计算数组中元素的差

C# 计算数组中元素的差,c#,arrays,linq,c#-4.0,C#,Arrays,Linq,C# 4.0,是否有方法计算数组中元素之间的差异,并使用LINQ检查差异是否大于1 如果你有一个数组{1,2,3,5,8,9},你想知道每个元素之间的差异是什么,并且只得到每个元素后面的元素,所以差异==1 使用LINQ可以做到这一点吗?您可以使用一些技巧 给予 您希望如何处理最后一个元素 应该包括9个吗?是否应包括{1,2,3,5,8}中的最后一个元素?您可以使用使用索引的.Where重载-当然,这也使用了数字是带有索引运算符的数组这一事实: int[] a = { 1, 2, 3, 5, 8, 9

是否有方法计算数组中元素之间的差异,并使用LINQ检查差异是否大于1

如果你有一个数组{1,2,3,5,8,9},你想知道每个元素之间的差异是什么,并且只得到每个元素后面的元素,所以差异==1


使用LINQ可以做到这一点吗?

您可以使用一些技巧

给予

您希望如何处理最后一个元素


应该包括9个吗?是否应包括
{1,2,3,5,8}
中的最后一个元素?

您可以使用使用索引的
.Where
重载-当然,这也使用了数字是带有索引运算符的数组这一事实:

    int[] a = { 1, 2, 3, 5, 8, 9 };
    var b = a.Where((item, index) =>
    {
        if(index + 1 == a.Length)
            return false;

        return item - a[index + 1] == -1;
    }).ToArray();
int[] numbers = new[] { 1, 2, 3, 5, 8, 9 };
int[] followNumbers = numbers.Where((x, idx) => 
                                (idx >=1 && numbers[idx-1] == x-1 
                                 || (idx < numbers.Length-1 
                                     && numbers[idx+1] == x+1) ))
                              .ToArray();
int[]number=new[]{1,2,3,5,8,9};
int[]followNumbers=数字。其中((x,idx)=>
(idx>=1&&numbers[idx-1]==x-1
||(idx
编辑以捕获作为连续数字“孤岛”一部分的所有数字,孤岛大小>1-这意味着您必须向前和向后查看每个数字,以确定前一个数字或后一个数字是否连续


在本例中,输出是
{1,2,3,8,9}

这将永远不包括最后一个b={1,2,8};//所以,是的,最后一个会被包括在内。你的例子中的8,9应该被包括在内吗?{1,2,3}应该返回什么?和{1,2,2,3}?例如,第一个可以返回{1,2,3}或{2,3}或{1,2,2,3}。第二个{1,2,2,3}或{2,3}…我只希望元素连续地跟随在一起这看起来不错,我只希望输出数组包含连续地跟随在一起的数字…@Tony:那么这个解决方案对你有效,或者你期望不同的结果?@Tony:对不起,有一个

    int[] a = { 1, 2, 3, 5, 8, 9 };
    var b = a.Where((item, index) =>
    {
        if(index + 1 == a.Length)
            return false;

        return item - a[index + 1] == -1;
    }).ToArray();
int[] numbers = new[] { 1, 2, 3, 5, 8, 9 };
int[] followNumbers = numbers.Where((x, idx) => 
                                (idx >=1 && numbers[idx-1] == x-1 
                                 || (idx < numbers.Length-1 
                                     && numbers[idx+1] == x+1) ))
                              .ToArray();