Как сравнить два массива и считать равные элементы в c # - PullRequest
0 голосов
/ 08 января 2019

У меня есть два массива: {1, 2, 3, 4, 5} и {1, 3, 3, 6, 5}.

Чтобы узнать, сколько предметов похожи (в той же позиции), я делаю так:

int[] a = new int[5] {1, 2, 3, 4, 5};
int[] b = new int[5] {1, 3, 3, 6, 5};
int count = 0;
for(int i = 0; i < 5; i++)
{
    if(a[i] == b[i])
      count++;
}
Console.Write(count);

Это даст результат 3.

Есть ли лучший (более быстрый) способ сделать это?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Основываясь на решении Zip, но с целью улучшения читабельности есть:

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

var count = a.Zip(b, (x, y) => (X : x, Y : y))
            .Where(t => t.X == t.Y)
            .Count();

Это работает путем объединения обоих массивов в одну последовательность кортежей (X, Y) и последующего использования Where для выбора только тех кортежей, где X и Y равны.

Вам нужно убедиться, что у вас есть ссылка на сборку System.ValueTuple, чтобы это работало.

0 голосов
/ 08 января 2019

Linq Zip() в одну сторону

int equalElements = a.Zip(b, (i, j) => i == j).Count(eq => eq);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...