Сравнение списков

capturis

Client
Регистрация
21.12.2013
Сообщения
41
Благодарностей
19
Баллы
8

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Добрые умные люди, подскажите, если кто знает - что надо дописать в этот код, что бы он еще и из первого списка удалял найденное совпадение.
  1. var firstList = project.Lists["firstList"];
  2. var secondList = project.Lists["secondList"];
  3. lock(SyncObjects.ListSyncer)
  4. {
  5. for(int i=0; i < firstList.Count; i++)
  6. {
  7. var str1 = firstList;
  8. for(int j=secondList.Count-1; j >= 0; j--)
    {
    var str2 = secondList[j];
    if (str1==str2)
    {
    secondList.RemoveAt(j);
    }
    }
    }
    }
Заранее спасибо
firstList.RemoveAt(i);
или ниже, или выше этой строчки надо вставить
secondList.RemoveAt(j);
 

john45

Client
Регистрация
01.11.2015
Сообщения
39
Благодарностей
5
Баллы
8

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
Есть еще одно решение, сам недавно так делал. Не знаю насколько оно элегантное, скорее через костыли, но все же))

Берем строку из списка1
Добавляем в список2
Получаем кол-во строк
Удаляем дубли
Снова получаем кол-во строк
Если кол-во строк изменилось, значит удаляем строку из списка 1
Если нет, то нет.

Все просто, но муторно)
А мне вот именно этот вариант самый подходящий так раз! Надо просто сделать проверку, этот вариант самый простой, доступный и быстрый).
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
Чтобы не плодить кучу тем, напишу тут :-)

Поиск использовал , но ответа не нашел .

Вообщем мне нужно тоже самое что и автору топика , но не много другому
список1 со значениями 1 2 3 4 5
список2 со значениями 2 3

Как сделать чтобы в списке1 удалились те значения которые присутсвуют в списке2 и в итоге получилось >> список1 1 4 5

Заранее благодарен за ответы
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
Чтобы не плодить кучу тем, напишу тут :-)

Поиск использовал , но ответа не нашел .

Вообщем мне нужно тоже самое что и автору топика , но не много другому
список1 со значениями 1 2 3 4 5
список2 со значениями 2 3

Как сделать чтобы в списке1 удалились те значения которые присутсвуют в списке2 и в итоге получилось >> список1 1 4 5

Заранее благодарен за ответы
Просто получаете из второго списка строки и удаляете из первого строки ,содержащие переменную.
Либо же можно объединить содержимое второго списка через | и удалить из первого всё, что соответствует регулярному выражению.
 
  • Спасибо
Реакции: Gizmond

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
Просто получаете из второго списка строки и удаляете из первого строки ,содержащие переменную.
Либо же можно объединить содержимое второго списка через | и удалить из первого всё, что соответствует регулярному выражению.
Взял строку из списка два положил в переменную. Потом через действия над списком > удаление строки > в поле удалить элементы содержащие текст ввел название переменной . Удаляет , но только если в переменой одно значение. Как правильно сделать если у меня допустим 4 значения в переменой ? Пробывал с несколькими не получается ни как .

Только начал изучать зенку и для пока это все сложно :-)
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Взял строку из списка два положил в переменную. Потом через действия над списком > удаление строки > в поле удалить элементы содержащие текст ввел название переменной . Удаляет , но только если в переменой одно значение. Как правильно сделать если у меня допустим 4 значения в переменой ? Пробывал с несколькими не получается ни как .

Только начал изучать зенку и для пока это все сложно :-)
значение1|значение2|значение3
Только удалять нужно не элементы, содержащие текст, а удовлетворяющие регулярному выражению
 
  • Спасибо
Реакции: Gizmond

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Как сделать чтобы в списке1 удалились те значения которые присутсвуют в списке2 и в итоге получилось >> список1 1 4 5
C#:
IZennoList list = project.Lists["List"];
IZennoList list2 = project.Lists["List2"];

List<string> tmpList = new List<string>();
tmpList = list.Except(list2).ToList();
list.Clear();
list.AddRange(tmpList);
 

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
Код:
var firstList = project.Lists["firstList"];
var secondList = project.Lists["secondList"];
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < firstList.Count; i++)
    {
        var str1 = firstList[i];
        for(int j=secondList.Count-1; j >= 0; j--)
        {
               var str2 = secondList[j];
            if (str1==str2)
            {
                secondList.RemoveAt(j);
            }      
        }      
    }
}
Добрый день! А не подскажете как удалить из secondList "несуществующие значения" в firstList
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
Все оказалось довольно просто . Сделал через регулярку | . Спс за помощь )
 

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