В настоящее время я тестирую каждый целочисленный элемент друг против друга для нахождения которые соответствие. Массивы не содержат дубликаты в своем собственном наборе. Кроме того, массивы являются не всегда равными длинами. Там какие-либо приемы должны ускорить это? Я делаю это тысячи времен, таким образом, это начинает становиться горлышком бутылки в моей программе, которая находится в C#.
Использовать HashSet
var set = new HashSet<int>(firstArray);
set.IntersectWith(secondArray);
Теперь набор содержит только те значения, которые существуют в обоих массивах.
Вы можете использовать LINQ:
var query = firstArray.Intersect(secondArray);
Или, если массивы уже отсортированы, вы можете выполнить итерацию по двум массивам самостоятельно:
int[] a = { 1, 3, 5 };
int[] b = { 2, 3, 4, 5 };
List<int> result = new List<int>();
int ia = 0;
int ib = 0;
while (ia < a.Length && ib < b.Length)
{
if (a[ia] == b[ib])
{
result.Add(a[ia]);
ib++;
ia++;
}
else if (a[ia] < b[ib])
{
ia++;
}
else
{
ib++;
}
}
Если такое сравнение является узким местом в вашей программе, возможно, вы используете несоответствующую структуру данных. Самый простой способ - сохранить сортировку данных. Затем, чтобы найти общие записи, вам нужно будет пройти по обоим массивам только один раз. Другой вариант - сохранить данные в HashSet.