Что самый быстрый путь состоит в том, чтобы найти количеством соответствий между массивами?

В настоящее время я тестирую каждый целочисленный элемент друг против друга для нахождения которые соответствие. Массивы не содержат дубликаты в своем собственном наборе. Кроме того, массивы являются не всегда равными длинами. Там какие-либо приемы должны ускорить это? Я делаю это тысячи времен, таким образом, это начинает становиться горлышком бутылки в моей программе, которая находится в C#.

5
задан John Sheares 10 April 2010 в 18:58
поделиться

3 ответа

Использовать HashSet

var set = new HashSet<int>(firstArray);
set.IntersectWith(secondArray);

Теперь набор содержит только те значения, которые существуют в обоих массивах.

5
ответ дан 13 December 2019 в 19:24
поделиться

Вы можете использовать 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++;
    }
}
6
ответ дан 13 December 2019 в 19:24
поделиться

Если такое сравнение является узким местом в вашей программе, возможно, вы используете несоответствующую структуру данных. Самый простой способ - сохранить сортировку данных. Затем, чтобы найти общие записи, вам нужно будет пройти по обоим массивам только один раз. Другой вариант - сохранить данные в HashSet.

0
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: