我试图检查由int [2]数组组成的列表是否包含某些元素.
总之,为什么这会产生错误?我该如何正确检查?
List < int[] > ngonPairs = new List<int[]> {new int[2] { 0, 1 }};
bool flag = ngonPairs.Contains(new int[2] { 0, 1 });
Run Code Online (Sandbox Code Playgroud)
标志总是错误的.
spe*_*der 13
这是因为
new[]{1, 2} != new[]{1, 2}
Run Code Online (Sandbox Code Playgroud)
它们是不同的数组,对一个的更改不会反映在另一个数组中.
但是使用LINQ SequenceEqual,您可以比较两个序列的内容:
new[]{1, 2}.SequenceEqual(new[]{1, 2}) // == true
Run Code Online (Sandbox Code Playgroud)
现在,使用LINQ,Any您可以:
bool flag = ngonPairs.Any(p => p.SequenceEqual(new int[] {0, 1}));
Run Code Online (Sandbox Code Playgroud)
.Any对序列进行操作,并且true如果序列中的任何项满足谓词,则返回.
在这种情况下,谓词比较来自ngonPairs(即数组)的单个项目,然后我们可以使用SequenceEqual上述方法将每个数组与我们已知的数组进行比较.
| 归档时间: |
|
| 查看次数: |
3421 次 |
| 最近记录: |