Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Nomana
26 / 27 / 21
Регистрация: 17.05.2016
Сообщений: 90
Завершенные тесты: 1
#1

Найти хотя бы одно совпадение в двух массивах

17.05.2016, 06:03. Просмотров 955. Ответов 7
Метки нет (Все метки)

Всем привет! Имеется следующий вопрос:

Есть 2 заполненных массива (mass1 и mass2). Нужно произвести проверку, встречается ли элементы mass1 в mass2 хотя бы один раз. Если нет - выводить сообщение, в каком индексе mass1 не нашлось совпадений.


Вот так вроде бы работает. Но хотелось бы услышать мнение, как еще лучше это можно реализовать.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MassMessage = new string[i];
for(i = 0; i < mass1.Length; i++)
{
    unique1 = true;
    for(j = 0; j < mass2.Length; j++)
    {
        if  (mass1[i] == mass2[j])
        {
            unique1 = false;
            break;          
        }
    }
    if (unique1)
    {       
        if (mass1[i] != "")
        {
        message04 = "В массиве 1 индекс " + (i+1) + " не совпадает со значениями массива 2.";
        ErrorList.Add(new ErrorItem(true, message04));  
        k = 1;  
        }           
    }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2016, 06:03
Ответы с готовыми решениями:

Сравнение двух текстовых переменных и вывод их разницы в виде текста что отличается в двух массивах
Есть две текстовых переменных типа string. Необходимо вывести в третью...

Сравнение двух списков на совпадение фамилий
Имеются два списка (А и В) фамилий в двух разных файлах Excel, задача состоит в...

Как ускорить процесс поиска совпадение в двух списках?
Есть два файла. Считываю из них оба значения в списки. Хочу взять уникальные...

Сравнить каждый элемент с каждым, если есть совпадение, то соединить всю строку, в которой найдено совпадение
Доброго времени суток! Есть два массива строк разного размера (элементы...

Имеется ли среди чисел a,b,c хотя бы одно четное
Определите,имеется ли среди чисел a,b,c хотя бы одно четное.

7
Hares
39 / 36 / 44
Регистрация: 08.05.2016
Сообщений: 119
Завершенные тесты: 1
17.05.2016, 08:45 #2
Подключите System.Linq и тогда можно будет написать в таком виде:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
MassMessage = new string[i];
for(i = 0; i < mass1.Length; i++)
{
    if (mass1[i] != "" && !mass2.Contains(mass1[i]))
    {       
        message04 = "В массиве 1 индекс " + (i+1) + " не совпадает со значениями массива 2.";
        ErrorList.Add(new ErrorItem(true, message04));
        k = 1;           
    }
}
0
Storm23
Эксперт .NETАвтор FAQ
6110 / 3665 / 1388
Регистрация: 11.01.2015
Сообщений: 4,832
Записей в блоге: 31
17.05.2016, 09:25 #3
Nomana, Используйте Hashset<>. В него нужно предварительно занести значения из второго массива, а затем использовать метод Contains.
Быстродействие вашего алгоритма - O(n^2), а с хешем будет O(n).
0
diadiavova
3738 / 1297 / 410
Регистрация: 11.04.2015
Сообщений: 2,412
Записей в блоге: 35
17.05.2016, 09:50 #4
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от Hares Посмотреть сообщение
Подключите System.Linq
Согласен, но только я бы сделал так
C#
1
var ErrorList = mass1.Select((a, i) => mass2.Contains(a) ? -1 : i).Where(i => i != -1).Select(i=> $"В массиве 1 индекс {i} не совпадает со значениями массива 2.");
0
Hares
39 / 36 / 44
Регистрация: 08.05.2016
Сообщений: 119
Завершенные тесты: 1
17.05.2016, 15:12 #5
Nomana, Используйте Hashset<>. В него нужно предварительно занести значения из второго массива, а затем использовать метод Contains.Быстродействие вашего алгоритма - O(n^2), а с хешем будет O(n)
Да, но в этом случае невозможно наличие дублей во втором массиве
0
Storm23
Эксперт .NETАвтор FAQ
6110 / 3665 / 1388
Регистрация: 11.01.2015
Сообщений: 4,832
Записей в блоге: 31
17.05.2016, 17:18 #6
Цитата Сообщение от Hares Посмотреть сообщение
Да, но в этом случае невозможно наличие дублей во втором массиве
Ну так дубли и не нужны, читаем внимательно условие задачи:
Нужно произвести проверку, встречается ли элементы mass1 в mass2 хотя бы один раз.
Зачем нам дубли в mass2 ?

Я к тому, не возникнет ли ошибки при создании/добавлении?
Нет, не возникнет. В Hashset можно добавлять один и тот же элемент множество раз.
0
Hares
39 / 36 / 44
Регистрация: 08.05.2016
Сообщений: 119
Завершенные тесты: 1
17.05.2016, 17:19 #7
Я к тому, не возникнет ли ошибки при создании/добавлении?
0
Nomana
26 / 27 / 21
Регистрация: 17.05.2016
Сообщений: 90
Завершенные тесты: 1
18.05.2016, 02:30  [ТС] #8
Спасибо большое Всем!
0
18.05.2016, 02:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2016, 02:30

Поиск совпадений в двух массивах
Добрый день задача тривиальная. Нужно сравнить два массива и удалить из одного...

Вывести все строки, в которых содержится хотя бы одно слово, оканчивающееся на “com”
4. Ввести с клавиатуры 7 строк, занести их в массив. Вывести все строки, в...

Проверить, существует ли в массиве из n целых чисел хотя бы одно число кратное 7
Проверить, существует ли в массиве из n целых чисел хотя бы одно число кратное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru