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

  • Автор темы Автор темы proffyes
  • Дата начала Дата начала

proffyes

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

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

Есть ли более элегантное решение?
 
Нет, разве что написать сниппет на c#, но разницы особой не будет.
 
Можно объединить их в один и удалить дубли. Если конечно не нужны именно отдельные списки.
 
Это даст совсем другой результат, проверьте на наборах: 1 2 3 и 2. Человеку нужно в результате иметь 1 3, а вы предлагаете получить 1 2 3.
 
  • Оценить
Реакции: proffyes
Я пояснил - если не нужны отдельные списки. Человек просит незамороченное решение.
 
Я, может, чего-то не понимаю, в таком случае прошу прощения. Как я понял, ему отдельные и не нужны, просто ему нужно конкретное действие с двумя наборами данных (сравнить; удалить из первого списка), которое по-другому-то и не сделаешь. Ну да ладно.
 
Мне нужно из 1 2 4 и и 1 2 3 получить 1 2 4 и 3
 
объедени и удали дубли и получишь 1 2 3 4

P.S. не заметил топик, в третьем топике тебе тоже самое расписали
 
Ну тогда нужно брать значение из одного списка, проверять, есть ли оно во втором, если есть, то удалять из второго и идти за следующим, если нету, то дописывать в третий. Таким образом в первом останется всё то, чего небыло во втором, а в третий попадёт всё то, чего небыло в первом.
 
Подскажите как по новой восстановить список, если мы его пребрали, удаляя строки (Получаем строку, ставим галочку удалить строку после взятия.). Но операции со списком в файле не сохраняли?
 
Подскажите как по новой восстановить список, если мы его пребрали, удаляя строки (Получаем строку, ставим галочку удалить строку после взятия.). Но операции со списком в файле не сохраняли?
В таком случае надо было в третий список складывать
 
Уже пора наверно стандартную функцию придумать!
 
  • Оценить
Реакции: tatarin
Это к програмистам, я думаю они без проблем это реализуют, только надо продумать точно. Я думаю идея не хорошая а идельная! Очень много топиков с вопросами о сравнении и тд, а тут бах, стандартный кубик, все довольны!:D
 
Нужно просто создать топик в предложениях, и все бы отписались, что именно нужно в этой функции "Сравнение списков"! А програмисты бы уже раелизовали! Самый желанный стандартный кубик я думаю будет!
 
Я имел ввиду то, что функция полезная, но не логично её наличие в программе. В программах по работе со списками нет таких функций сравнивания двух списков.
 
Код:
Развернуть Свернуть Копировать
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);
            }       
        }       
    }
}
 
Есть еще одно решение, сам недавно так делал. Не знаю насколько оно элегантное, скорее через костыли, но все же))

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

Все просто, но муторно)
 
  • Оценить
Реакции: AndreyAAA
Господа, сейчас не реализована даже стандартнейшая операция «Получить индекс заданного элемента» — ни в таблице, ни в списке. А вы просите реализовать какую-то сложную операцию с двумя списками, явно не базовую. Да с двумя списками чего только не понаделаешь! Что же, всё реализовать отдельными кубиками? Предлагаю всё-таки по порядку как-то.

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

А с помощью этих базовых методов можно легко реализовать хоть сравнения, хоть вычитания, хоть пересечения, хоть объединения — всё, что душе угодно.
 
Код:
Развернуть Свернуть Копировать
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);
            }     
        }     
    }
}
Если не сложно , разжуйте по пунктам как с помощью этого кода реализовать задачу из первого поста.
 
Я имел ввиду то, что функция полезная, но не логично её наличие в программе. В программах по работе со списками нет таких функций сравнивания двух списков.
Очень жаль, кто не варит в коде, она была бы не заменима! Все таки может устроите голосование?
 
Если не сложно , разжуйте по пунктам как с помощью этого кода реализовать задачу из первого поста.
в списке firstList архив старых данных
в списке secondList новые данные
после выполнения кода в secondList останутся только значения, которых нет в firstList
 
в списке firstList архив старых данных
в списке secondList новые данные
после выполнения кода в secondList останутся только значения, которых нет в firstList
Что-то я не понял. Сделал 2 списка. Прописал их названия в [квадратных скобках] - а что дальше? Можете еще подробнее написать для совсем новичков?
 
Ну, выполняй действие и смотри результат.
Если хочешь ускориться, смотри онлайн-курсы или просто оплати опытному чуваку (не мне, я ленивый) пару часов онлайн-присутствия, он тебе быстро покажет и расскажет всё самое основное.
 
Ну, выполняй действие и смотри результат.
Если хочешь ускориться, смотри онлайн-курсы или просто оплати опытному чуваку (не мне, я ленивый) пару часов онлайн-присутствия, он тебе быстро покажет и расскажет всё самое основное.
Да все - с этим разобрался, только как-то долго очень происходит. Я потому и не понял - что сначала подумал, что вообще все зависло.
Скажите нет ли какого другого способа, более быстрого?
 
Последнее редактирование:
Добрые умные люди, подскажите, если кто знает - что надо дописать в этот код, что бы он еще и из первого списка удалял найденное совпадение.
  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);
    }
    }
    }
    }
Заранее спасибо
 

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