Сравнить 3 списка и если срока повторяется каждом из 3 добавить в четвертый

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Добрый день. Есть 3 списка
List1
List2
List3
Если какая-нибудь из строк повторяется к каждом из 3 списков вынести ее в новый список list4
Спасибо за помощь
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
C#:
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];
var list4 = project.Lists["list4"];

var  hash = new HashSet<string>();
foreach(string s in list1) {
    bool check_1 = list2.Contains(s);
    bool check_2 = list3.Contains(s);
    if(check_1 && check_2) hash.Add(s);
}

if(hash.Count > 0) list4.AddRange(hash);
 
  • Спасибо
Реакции: baracuda

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Спасибо большое! Код работает, находит то что необходимо)
 
  • Спасибо
Реакции: BAZAg

ZULI

Client
Регистрация
09.09.2020
Сообщения
423
Благодарностей
165
Баллы
43
Если какая-нибудь из строк повторяется к каждом из 3 списков вынести ее в новый список list4
Код который дал @BAZAg хорош, но вот что будет если у тебя в списке 2 или 3 есть строка которой нет в списке 1 ? Насколько я понимаю в предложенном коде идет сравнение списка 1 со списками 2 и 3, а не каждого списка со всеми остальными. Или тебе нужно только первый сравнивать?
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Код который дал @BAZAg хорош, но вот что будет если у тебя в списке 2 или 3 есть строка которой нет в списке 1 ? Насколько я понимаю в предложенном коде идет сравнение списка 1 со списками 2 и 3, а не каждого списка со всеми остальными. Или тебе нужно только первый сравнивать?
Тогда она не сможет быть одновременно в списке 1-2-3 - а значит не соответствует условиям.

Решается вот эта задача:
строка повторяется в каждом из 3 списков
 

ZULI

Client
Регистрация
09.09.2020
Сообщения
423
Благодарностей
165
Баллы
43
@BAZAg тогда да, согласен, просто привык к защитам "от юзера" и подумал что вот такой может случиться случай.
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Тогда она не сможет быть одновременно в списке 1-2-3 - а значит не соответствует условиям.

Решается вот эта задача:
Еще подскажи пожалуйста как правильно дополнить этот код если задача проверить 4 списка и результат вывести в 5.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Еще подскажи пожалуйста как правильно дополнить этот код если задача проверить 4 списка и результат вывести в 5.
Добавить ещё один список просто и дополнительную проверку.

C#:
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];
var list4 = project.Lists["list4"];
var list5 = project.Lists["list5"];
var  hash = new HashSet<string>();
foreach(string s in list1) {
    bool check_1 = list2.Contains(s);
    bool check_2 = list3.Contains(s);
    bool check_3 = list4.Contains(s);
    if(check_1 && check_2 && check_3) hash.Add(s);
}

if(hash.Count > 0) list5.AddRange(hash);
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
именно так и делал. и выдавало ошибку(
понял что не добавил в проджект еще один лист(list5) в списки - после того как добавил все работает!
еще раз спасибо
 
  • Спасибо
Реакции: BAZAg

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Добавить ещё один список просто и дополнительную проверку.

C#:
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];
var list4 = project.Lists["list4"];
var list5 = project.Lists["list5"];
var  hash = new HashSet<string>();
foreach(string s in list1) {
    bool check_1 = list2.Contains(s);
    bool check_2 = list3.Contains(s);
    bool check_3 = list4.Contains(s);
    if(check_1 && check_2 && check_3) hash.Add(s);
}

if(hash.Count > 0) list5.AddRange(hash);
сравнить 2 списка, делаю такой код, но не получаю результата
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];

var hash = new HashSet<string>();
foreach(string s in list1) {
bool check_1 = list2.Contains(s);
if(check_1) hash.Add(s);
}

if(hash.Count > 0) list3.AddRange(hash);

где моя ошибка?
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
сравнить 2 списка, делаю такой код, но не получаю результата
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];

var hash = new HashSet<string>();
foreach(string s in list1) {
bool check_1 = list2.Contains(s);
if(check_1) hash.Add(s);
}

if(hash.Count > 0) list3.AddRange(hash);

где моя ошибка?
Вот добивил демо-данные.
Вижу, что результат забрасывает в третий корректно.

C#:
var list1 = project.Lists["list1"];
    list1.Add("ss");
    list1.Add("s");
    list1.Add("p");
    
var list2 = project.Lists["list2"];
    list2.Add("ss");
    list2.Add("r");
    
var list3 = project.Lists["list3"];

var hash = new HashSet<string>();
foreach(string s in list1) {
    bool check = list2.Contains(s);
    if(check) hash.Add(s);
}

if(hash.Count > 0) list3.AddRange(hash);
118859
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];

var hash = new HashSet<string>();
foreach(string s in list1) {
bool check = list2.Contains(s);
if(check) hash.Add(s);
}

if(hash.Count > 0) list3.AddRange(hash);
Вот добивил демо-данные.
Вижу, что результат забрасывает в третий корректно.

C#:
var list1 = project.Lists["list1"];
    list1.Add("ss");
    list1.Add("s");
    list1.Add("p");
   
var list2 = project.Lists["list2"];
    list2.Add("ss");
    list2.Add("r");
   
var list3 = project.Lists["list3"];

var hash = new HashSet<string>();
foreach(string s in list1) {
    bool check = list2.Contains(s);
    if(check) hash.Add(s);
}

if(hash.Count > 0) list3.AddRange(hash);
Посмотреть вложение 118859
такой код
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];

var hash = new HashSet<string>();
foreach(string s in list1) {
bool check = list2.Contains(s);
if(check) hash.Add(s);
}

if(hash.Count > 0) list3.AddRange(hash);
делает без ошибки но не выводит данные в list3. В чем может быть проблема?
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Спасибо, все работает. Можете еще подсказать код на случай
лист1 и лист2 - выводить строчки из лист1 которых нет в лист2 в лист3
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Спасибо, все работает. Можете еще подсказать код на случай
лист1 и лист2 - выводить строчки из лист1 которых нет в лист2 в лист3
C#:
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];
var hash = new HashSet<string>();
foreach(string s in list1) {
    bool check = list2.Contains(s);
    if(!check) hash.Add(s);
}
if(hash.Count > 0) list3.AddRange(hash);
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
C#:
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];
var hash = new HashSet<string>();
foreach(string s in list1) {
    bool check = list2.Contains(s);
    if(!check) hash.Add(s);
}
if(hash.Count > 0) list3.AddRange(hash);
не выводить результат( в листе 1 есть строки которые повторяются и которых нет в лист 2.
код отрабатывает , но не создает 3й лист с результатом
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Мож
C#:
var list1 = project.Lists["list1"];
var list2 = project.Lists["list2"];
var list3 = project.Lists["list3"];
var hash = new HashSet<string>();
foreach(string s in list1) {
    bool check = list2.Contains(s);
    if(!check) hash.Add(s);
}
if(hash.Count > 0) list3.AddRange(hash);
Подскажи пожалуйста в чем проблема. очень необходим этот код
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
не выводить результат( в листе 1 есть строки которые повторяются и которых нет в лист 2.
код отрабатывает , но не создает 3й лист с результатом
Я подставил демо данные и вижу, что решение работает корректно для случая:
лист1 и лист2 - выводить строчки из лист1 которых нет в лист2 в лист3

C#:
var list1 = project.Lists["list1"];
    list1.Add("ss");
    list1.Add("s");
    list1.Add("p");
    
var list2 = project.Lists["list2"];
    list2.Add("ss");
    list2.Add("r");
    
var list3 = project.Lists["list3"];

var hash = new HashSet<string>();
foreach(string s in list1) {
    bool check = list2.Contains(s);
    if(!check) hash.Add(s);
}

if(hash.Count > 0) list3.AddRange(hash);
119202
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)