Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
C# 将两个列表元素与LINQ进行比较_C#_.net_Linq - Fatal编程技术网

C# 将两个列表元素与LINQ进行比较

C# 将两个列表元素与LINQ进行比较,c#,.net,linq,C#,.net,Linq,我试图找到一个LINQ表达式来比较两个列表元素 我想做的是: List<int> _int = new List<int> { 1, 2, 3, 3, 4, 5}; _int.Where(x => x == _int[(_int.IndexOf(x)) + 1]); List_int=新列表{1,2,3,3,4,5}; _其中(x=>x==_int[(_int.IndexOf(x))+1]); 不幸的是,只有最后一个+1跳出列表的范围 如何在LINQ表达式中比较

我试图找到一个LINQ表达式来比较两个列表元素

我想做的是:

List<int> _int = new List<int> { 1, 2, 3, 3, 4, 5};
_int.Where(x => x == _int[(_int.IndexOf(x)) + 1]);
List_int=新列表{1,2,3,3,4,5};
_其中(x=>x==_int[(_int.IndexOf(x))+1]);
不幸的是,只有最后一个
+1
跳出列表的范围

如何在LINQ表达式中比较列表中的一项和下一项?

int I=0;
int i = 0;
_int.Where(x => 
{
    i++;
    return i < _int.Length && x == _int[i];
});
_int.Where(x=> { i++; 返回i<\u int.Length&&x==\u int[i]; });
如果确实要使用lambda表达式,请添加绑定检查(总是返回最后一个元素或从不返回,由您选择)


不过,在我看来,迭代方法更具可读性。

这是一个有趣的问题,我可能会选择查询表达式语法,在这里可以这样做

int[] array = {1,2,3,3,4,5};
var query = from item in array.Select((val, index) => new { val, index })
            join nextItem in array.Select((val, index) => new { val, index })
            on item.index equals (nextItem.index + 1)
            where item.val == nextItem.val
            select item.val;
它将从数组(或列表)中提取3。当然,可以在查询表达式中完成的工作显然可以在lambda中完成

EditJoel的解决方案比我的简单得多,如果您只需要它来处理列表或数组,它是完美的。如果您需要更灵活的方法来处理任何IEnumerable,那么您可以使用上述方法(或明显更好的方法)。

List\u int=newlist{1,2,3,3,4,5};
可枚举范围(0,_int.Count-1)
.Select(i=>new{val=_int[i],val2=_int[i+1]})
.Where(check=>check.val==check.val2)
.选择(check=>check.val);

不是很好,但应该可以用

list.Where((index, item) => index < list.Count - 1 && list[index + 1] == item)

这与最后一个元素不是同样的问题吗?不是,因为&&是一个短路运算符。也就是说,当i<\u int.Length时,x==\u int[i]将不会被计算。@Odrade,原始注释是在编辑长度检查之前。@Anthony。我懂了。我想我应该养成查看修订的习惯。还有一件事:您需要对这段代码小心一点,因为它会创建一个闭包。闭包有时会让程序员感到意外。“index,item”出现了一些问题(我不得不切换它们),但您的第一个解决方案是有效的,并且不需要在外面设置计数器!!太好了,谢谢。
list.Where((index, item) => index < list.Count - 1 && list[index + 1] == item)
list.Take(list.Count - 1).Where((index, item) => list[index + 1] == item)