Процент эквивалентности между двумя массивами

Мне нужен способ сравнить два массива и вычислить процент эквивалентности, поэтому, если процент эквивалентности превышает (например, 60%), выполните некоторые действия, используемые язык C# .NET 4.0

2 ответа

Решение

Вопрос плохо определен, поэтому я взял несколько общих предположений, но вот пример реализации, которая измеряет эквивалентность на основе равенства элементов:

int[] a = new int[] { 1, 2, 3, 4, 5 };
int[] b = new int[] { 1, 7, 3, 4 };

int equalElements = a.Zip(b, (i, j) => i == j).Count(eq => eq);
double equivalence = (double)equalElements / Math.Max(a.Length, b.Length);
if (equivalence >= .6)
{
    // 60%+ equivalent
}

Zip: "Применяет указанную функцию к соответствующим элементам двух последовательностей." В этом случае мы сравниваем каждый элемент из a с соответствующим элементом из b и производя true если они равны Например, мы сравниваем 1 с 1, 2 с 7, 3 с 3, а также 4 с 4, Затем мы подсчитываем количество равенств, с которыми мы столкнулись, сохраняя это значение в equalElements, Наконец, мы делим это на общее количество элементов в большей последовательности, и, таким образом, получаем коэффициент эквивалентности.

Предполагая, что вы сравниваете два списка int (или массива, это одно и то же), вы можете вычислить процент эквивалентных элементов между list1 а также list2 сюда:

List<int> list1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
List<int> list2 = new List<int>() { 3, 5, 8 };
var res = list1.Intersect(list2).ToList().Count();
float perc = (float)list1.Count() / res;
Другие вопросы по тегам