C# 从两个数组中删除不匹配的数字

C# 从两个数组中删除不匹配的数字,c#,unity3d,C#,Unity3d,我有一个foreach,它在两个数组上循环,检查数字是否匹配,并且顺序是否相同 但是,其中一个数组可能有一些额外的数字,我想在比较之前删除/忽略这些数字 例如: int[] currentTracingPoints = new int[] { 1,2,3,4 }; int[] part = new int[] {1,2,3}; int[] currentTracingPoints = new int[] {4,5,6,8}; int[] part = new int[] {4,5,8}; 我

我有一个
foreach
,它在两个
数组上循环
,检查数字是否匹配,并且顺序是否相同

但是,其中一个
数组
可能有一些额外的数字,我想在比较之前删除/忽略这些数字

例如:

int[] currentTracingPoints = new int[] { 1,2,3,4 };
int[] part = new int[] {1,2,3};
int[] currentTracingPoints = new int[] {4,5,6,8};
int[] part = new int[] {4,5,8};
我想从
currentTracingPoints

例如:

int[] currentTracingPoints = new int[] { 1,2,3,4 };
int[] part = new int[] {1,2,3};
int[] currentTracingPoints = new int[] {4,5,6,8};
int[] part = new int[] {4,5,8};
我想从
currentTracingPoints

我在使用统一

foreach(tracingParts中的TracingPart){//检查跟踪部件
if(currentTracingPoints.Count==part.order.Length&&!part.succeed){
//检查之前的跟踪部件是否成功
如果(先前的LetterSpartsSuccessed(零件,跟踪零件)){
equiffound=true;//假定为true
对于(int i=0;i
您可以使用LINQ获得两个阵列之间的差异:

int[] diff = currentTracingPoints.Except(part);
然后在循环中迭代时,可以看到当前部分是否存在于diff数组中,以及它是否跳过当前迭代

希望我能正确理解您的需求,如果没有,请让我知道

您可以使用,使用Linq:

var result = currentTracingPoints.Intersect(part);
这一个比较并删除不在两个数组中的元素

这相当于


输出:

1
2
3

如果您对使用自己的代码删除元素感兴趣。 我会为每个数组使用列表,因为它们更具延展性

您将向后迭代currentTracingPoints,并删除在零件数组中找不到的任何对象

List< int > currentTracingPoints = new List<int> ( { 1, 2, 3, 4 } );
List< int > parts = new List<int> ( { 1, 2, 3 } );

for ( int index = currentTracingPoints.Count-1; index >= 0; index-- )
{
    if ( !parts.Contains( currentTracingPoints[ index ] ) )
    {
        currentTracingPoints.RemoveAt( index );
    }
}
ListcurrentTracingPoints=新列表({1,2,3,4});
Listparts=新列表({1,2,3});
对于(int index=currentTracingPoints.Count-1;index>=0;index--)
{
如果(!parts.Contains(currentTracingPoints[index]))
{
currentTracingPoints.RemoveAt(索引);
}
}
然后,将留下一个与部分匹配的数组。 然后可以使用


我不是100%确定这是否绝对是最快的,但它会起作用。它是否会成为性能瓶颈取决于阵列的大小和周围其他必要的进程

…你的问题是什么?什么不正常?在这两种情况下,您希望在
currentTracingPoints
中得到的结果似乎只是
部分。为什么不直接使用
零件
?我遗漏了什么?当前,如果两个
数组
都是相同顺序的完全相同的值,
{1,2,3}
,则代码可以工作。但是,有时
currentTracingPoints
会有一些额外的数字,我想在比较之前先删除这些数字,检查两个
数组是否具有相同的数字顺序。我比较的两个
数组是
currentTracingPoints
part
。其他所有东西都是统一的父对象
实际上,您可以忽略foreach
代码。我只是把它作为我正在做的事情的背景。实际上,我只想看看两个
数组
,并从
currentTracingPoints
中删除额外的值。然后,当我得到一个错误
ArrayList
不包含
var result=currentTracingPoints.intersect(部分)的“intersect”定义后,我可以进行比较检查使用System.Linq添加