有没有办法计算数组中元素之间的差异,并检查差异是否> 1使用LINQ?
所以如果你有一个数组{1,2,3,5,8,9},想要知道每个元素之间的差异,并且只获得每个元素后面的元素,所以差异== 1。
这可以使用LINQ吗?
答案 0 :(得分:4)
您可以使用使用索引的.Where
重载 - 当然这也使用了数字是带索引运算符的数组的事实:
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();
编辑以捕获属于连续数字“孤岛”的所有数字,其岛大小为&gt; 1 - 这意味着您必须从每个数字向前和向后查找,以查找前任或后继是否连续。
示例中的输出为{1,2,3,8,9}
。
答案 1 :(得分:3)
您可以使用Enumerable.Zip
var testArray = new int[] { 1, 2, 3, 5, 8, 9 };
var withNextElement = testArray.Zip(testArray.Skip(1), Tuple.Create);
var onlyOffByOne = withNextElement.Where(x => x.Item1 + 1 == x.Item2);
var withMatchingNext = onlyOffByOne.Select(x => x.Item1);
foreach(var item in withMatchingNext)
Console.WriteLine(item);
给出
1
2
8
您想如何处理最后一个元素?
应该包括9个?是否应该包含{1,2,3,5,8}
中的最后一个元素?
答案 2 :(得分:2)
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();