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

proffyes

Client
Регистрация
16.07.2015
Сообщения
409
Благодарностей
19
Баллы
18
Как лучше в Зенно сделать сравнение списков. Есть 2 списка А и Б, нужно из Списка Б удалить все значения, имеющиеся в списке А.

Первое что пришло в голову дергать по 1 значению из списка А пихать его в переменную, и удалять строку со значением из переменной в Б.

Есть ли более элегантное решение?
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
796
Баллы
113
Нет, разве что написать сниппет на c#, но разницы особой не будет.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 241
Благодарностей
5 847
Баллы
113
Можно объединить их в один и удалить дубли. Если конечно не нужны именно отдельные списки.
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
796
Баллы
113
Это даст совсем другой результат, проверьте на наборах: 1 2 3 и 2. Человеку нужно в результате иметь 1 3, а вы предлагаете получить 1 2 3.
 
  • Спасибо
Реакции: proffyes

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 241
Благодарностей
5 847
Баллы
113
Я пояснил - если не нужны отдельные списки. Человек просит незамороченное решение.
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
796
Баллы
113
Я, может, чего-то не понимаю, в таком случае прошу прощения. Как я понял, ему отдельные и не нужны, просто ему нужно конкретное действие с двумя наборами данных (сравнить; удалить из первого списка), которое по-другому-то и не сделаешь. Ну да ладно.
 

proffyes

Client
Регистрация
16.07.2015
Сообщения
409
Благодарностей
19
Баллы
18
Мне нужно из 1 2 4 и и 1 2 3 получить 1 2 4 и 3
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
объедени и удали дубли и получишь 1 2 3 4

P.S. не заметил топик, в третьем топике тебе тоже самое расписали
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
Ну тогда нужно брать значение из одного списка, проверять, есть ли оно во втором, если есть, то удалять из второго и идти за следующим, если нету, то дописывать в третий. Таким образом в первом останется всё то, чего небыло во втором, а в третий попадёт всё то, чего небыло в первом.
 

proffyes

Client
Регистрация
16.07.2015
Сообщения
409
Благодарностей
19
Баллы
18
Подскажите как по новой восстановить список, если мы его пребрали, удаляя строки (Получаем строку, ставим галочку удалить строку после взятия.). Но операции со списком в файле не сохраняли?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Подскажите как по новой восстановить список, если мы его пребрали, удаляя строки (Получаем строку, ставим галочку удалить строку после взятия.). Но операции со списком в файле не сохраняли?
В таком случае надо было в третий список складывать
 

proffyes

Client
Регистрация
16.07.2015
Сообщения
409
Благодарностей
19
Баллы
18

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 241
Благодарностей
5 847
Баллы
113
  • Спасибо
Реакции: proffyes

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 241
Благодарностей
5 847
Баллы
113

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43
Уже пора наверно стандартную функцию придумать!
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 241
Благодарностей
5 847
Баллы
113
  • Спасибо
Реакции: tatarin

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43
Это к програмистам, я думаю они без проблем это реализуют, только надо продумать точно. Я думаю идея не хорошая а идельная! Очень много топиков с вопросами о сравнении и тд, а тут бах, стандартный кубик, все довольны!:D
 

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43
Нужно просто создать топик в предложениях, и все бы отписались, что именно нужно в этой функции "Сравнение списков"! А програмисты бы уже раелизовали! Самый желанный стандартный кубик я думаю будет!
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 241
Благодарностей
5 847
Баллы
113
Я имел ввиду то, что функция полезная, но не логично её наличие в программе. В программах по работе со списками нет таких функций сравнивания двух списков.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Код:
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);
            }       
        }       
    }
}
 

runlike

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

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

Все просто, но муторно)
 
  • Спасибо
Реакции: AndreyAAA

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
796
Баллы
113
Господа, сейчас не реализована даже стандартнейшая операция «Получить индекс заданного элемента» — ни в таблице, ни в списке. А вы просите реализовать какую-то сложную операцию с двумя списками, явно не базовую. Да с двумя списками чего только не понаделаешь! Что же, всё реализовать отдельными кубиками? Предлагаю всё-таки по порядку как-то.

Реализовать в зеннолабовском List'е основные методы стандартного List из .Net.
Доделать для этих методов соответствующие кубики в PM.

А с помощью этих базовых методов можно легко реализовать хоть сравнения, хоть вычитания, хоть пересечения, хоть объединения — всё, что душе угодно.
 

сергос

Client
Регистрация
30.03.2015
Сообщения
27
Благодарностей
13
Баллы
3
Код:
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);
            }     
        }     
    }
}
Если не сложно , разжуйте по пунктам как с помощью этого кода реализовать задачу из первого поста.
 

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43
Я имел ввиду то, что функция полезная, но не логично её наличие в программе. В программах по работе со списками нет таких функций сравнивания двух списков.
Очень жаль, кто не варит в коде, она была бы не заменима! Все таки может устроите голосование?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Если не сложно , разжуйте по пунктам как с помощью этого кода реализовать задачу из первого поста.
в списке firstList архив старых данных
в списке secondList новые данные
после выполнения кода в secondList останутся только значения, которых нет в firstList
 

john45

Client
Регистрация
01.11.2015
Сообщения
39
Благодарностей
5
Баллы
8
в списке firstList архив старых данных
в списке secondList новые данные
после выполнения кода в secondList останутся только значения, которых нет в firstList
Что-то я не понял. Сделал 2 списка. Прописал их названия в [квадратных скобках] - а что дальше? Можете еще подробнее написать для совсем новичков?
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
796
Баллы
113
Ну, выполняй действие и смотри результат.
Если хочешь ускориться, смотри онлайн-курсы или просто оплати опытному чуваку (не мне, я ленивый) пару часов онлайн-присутствия, он тебе быстро покажет и расскажет всё самое основное.
 

john45

Client
Регистрация
01.11.2015
Сообщения
39
Благодарностей
5
Баллы
8
Ну, выполняй действие и смотри результат.
Если хочешь ускориться, смотри онлайн-курсы или просто оплати опытному чуваку (не мне, я ленивый) пару часов онлайн-присутствия, он тебе быстро покажет и расскажет всё самое основное.
Да все - с этим разобрался, только как-то долго очень происходит. Я потому и не понял - что сначала подумал, что вообще все зависло.
Скажите нет ли какого другого способа, более быстрого?
 
Последнее редактирование:

john45

Client
Регистрация
01.11.2015
Сообщения
39
Благодарностей
5
Баллы
8
Добрые умные люди, подскажите, если кто знает - что надо дописать в этот код, что бы он еще и из первого списка удалял найденное совпадение.
  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);
    }
    }
    }
    }
Заранее спасибо
 

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