powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / except между list<object>
88 сообщений из 88, показаны все 4 страниц
except между list<object>
    #39721365
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 2 листа объектов.
Хочу оставить только объекты, которых нет в dev.
как это сделать?
так не работает
Код: sql
1.
2.
3.
List<Doc> dev = new List<Doc>();
List<Doc> BD = new List<Doc>();
IEnumerable<Doc> num = BD.Except<Doc>(dev)
...
Рейтинг: 0 / 0
except между list<object>
    #39721369
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecтак не работаетвыдается сообщение "не работает"?
...
Рейтинг: 0 / 0
except между list<object>
    #39721372
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec
Код: sql
1.
Doc



А как ты сравниваешь Doc?

По Id, title или в принципе - так, похожи?
...
Рейтинг: 0 / 0
except между list<object>
    #39721373
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
			var a = new List<int>() { 1, 2, 3 };
			var b = new List<int>() { 1, 4 };
			Console.WriteLine(string.Join(",", a.Except(b)));
...
Рейтинг: 0 / 0
except между list<object>
    #39721377
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомА как ты сравниваешь Doc?

По Id, title или в принципе - так, похожи?Ну для начала, надо выяснить, что такое Doc - класс или структура
...
Рейтинг: 0 / 0
except между list<object>
    #39721404
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
public class Doc
    {
        public byte Mod {get; set;}
        public int Id { get; set; }

    }
...
Рейтинг: 0 / 0
except между list<object>
    #39721409
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь второй вопрос, экземпляры классов в списке dev те же, что и в списке BD? Или только значения свойств совпадают?
...
Рейтинг: 0 / 0
except между list<object>
    #39721410
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и теория, которую надо знать
https://blog.rc21net.ru/csharp-sravnenie-obektov/
...
Рейтинг: 0 / 0
except между list<object>
    #39721414
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProТеперь второй вопрос, экземпляры классов в списке dev те же, что и в списке BD? Или только значения свойств совпадают?
значения свойств совпадают
...
Рейтинг: 0 / 0
except между list<object>
    #39721417
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecзначения свойств совпадаютно объекты-то разные. Раз в списках нет одинаковых объектов, то и Except ничего не исключает.
Тут два выхода
а) читать учебник
б) заменить class на struct (раз лень читать учебник)
...
Рейтинг: 0 / 0
except между list<object>
    #39721435
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
except между list<object>
    #39721451
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

я лично (если задачка сравнения локальная) предпочитаю компараторы
...
Рейтинг: 0 / 0
except между list<object>
    #39721456
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если из двух листов сделать 2 datatable, тогда получится сделать except ?
...
Рейтинг: 0 / 0
except между list<object>
    #39721457
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecа если из двух листов сделать 2 datatable, тогда получится сделать except ?стань волшебником
...
Рейтинг: 0 / 0
except между list<object>
    #39721468
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecа если из двух листов сделать 2 datatable, тогда получится сделать except ?офигел что ли?
...
Рейтинг: 0 / 0
except между list<object>
    #39721469
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec,

Можно еще в бд загнать и на sql сравнить.)
...
Рейтинг: 0 / 0
except между list<object>
    #39721471
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec, дали ведь тут 21712313 ссылку. Там почти один в один твой случай.
...
Рейтинг: 0 / 0
except между list<object>
    #39721475
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123NewIvanovec,

Можно еще в бд загнать и на sql сравнить.)

В 1С так и делают.
...
Рейтинг: 0 / 0
except между list<object>
    #39721643
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да переопределить нужно пару методов, Хвост уже дал ссылку
...
Рейтинг: 0 / 0
except между list<object>
    #39721652
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79да переопределить нужно пару методов, Хвост уже дал ссылкуесли не упадет в другом месте. Нет однозначности в нашем мире.
...
Рейтинг: 0 / 0
except между list<object>
    #39721655
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec,
3ий вариант решения создать копию списка
List<string>
Например из айдишников, ГУИДов и т. д.
И потом intersect
...
Рейтинг: 0 / 0
except между list<object>
    #39721663
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123NewIvanovec,
3ий вариант решения создать копию списка
List<string>
Например из айдишников, ГУИДов и т. д.
И потом intersectсмысл-то? Потом все равно потребуется фильтровать основной лист
...
Рейтинг: 0 / 0
except между list<object>
    #39721665
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Наверно ты прав. У меня юзкейс был другой.
Нужен был только список айдишников. Поэтому прокатил вариант.
...
Рейтинг: 0 / 0
except между list<object>
    #39721671
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Shocker.Pro,
Наверно ты прав. У меня юзкейс был другой.
Нужен был только список айдишников. Поэтому прокатил вариант.даже в этом случае копию создавать излишне. Select тебе в помощь
...
Рейтинг: 0 / 0
except между list<object>
    #39721707
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Не.
Мне список айдишников передавать в модуль удаления. Поэтому сами объекты не нужны далее.
Тут у ТСа тоже нужно знать что потом далее.
Поэтому формально тут два решения.
Остальные как бонусы)
...
Рейтинг: 0 / 0
except между list<object>
    #39721729
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Не.
Мне список айдишников передавать в модуль удаленияЕще раз. Petro123вариант решения создать копию списка
List<string>Копию List для того, чтобы делать над ними Intersect, не нужно, достаточно сделать intersect(except и т.п.) над Select-ами из обоих списков.
...
Рейтинг: 0 / 0
except между list<object>
    #39721799
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Приведи тогда уж пример чтобы вопрос закрыть. Я делал
var c =
Без ".....ToList().
Копия это в оперативке или нет, х. З.
...
Рейтинг: 0 / 0
except между list<object>
    #39721833
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123х. З.оооо, все плохо
похоже, ты пропустил несколько глав про перечисления, конвейер, yield и Linq
цитировать все это нет смысла, слишком много
...
Рейтинг: 0 / 0
except между list<object>
    #39721842
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Передавать ленивые linq-выражения в другие функции может быть чревато. Например, потерей соединения с DB, из которой они извлекают данные.
...
Рейтинг: 0 / 0
except между list<object>
    #39721846
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомShocker.Pro,

Передавать ленивые linq-выражения в другие функции может быть чревато. Например, потерей соединения с DB, из которой они извлекают данные.
Т.е. если извлекать данные сразу на месте, то соединение не потеряется? Т.е. функции при передаче куда-то где-то задерживаются?
...
Рейтинг: 0 / 0
except между list<object>
    #39721848
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Конечно я пропустил). Я экстерном и быстро учусь.
Копию списка я скорее всего говорил в бизнес понимании и программистком.
var c = коллекция select без окончания ToList() будет копия переменной списка на один список в памяти.
Так?
Тогда нет споров.
Два ответа и третий ответ как бонус.
Суть кода ты понял, а о терминологии слова "копия" или "реализует" можно спорить бесконечно))
...
Рейтинг: 0 / 0
except между list<object>
    #39721852
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомShocker.Pro,

Передавать ленивые linq-выражения в другие функции может быть чревато. Например, потерей соединения с DB, из которой они извлекают данные.Ну ленивые и DB это каждый сам смотрит.
Больше значение имеют потоки.
Или память освободить.
Всё надо учитывать в коде.
...
Рейтинг: 0 / 0
except между list<object>
    #39721857
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecесть 2 листа объектов.
Хочу оставить только объекты, которых нет в dev.
как это сделать?
так не работает
Код: sql
1.
2.
3.
List<Doc> dev = new List<Doc>();
List<Doc> BD = new List<Doc>();
IEnumerable<Doc> num = BD.Except<Doc>(dev)


А переделайте на массивы структур.
...
Рейтинг: 0 / 0
except между list<object>
    #39721861
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123var c = коллекция select без окончания ToList() будет копия переменной списка на один список в памяти.
Так?
Тогда нет споров.

O_O

Не так.
...
Рейтинг: 0 / 0
except между list<object>
    #39721864
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныАгнец за бортомShocker.Pro,

Передавать ленивые linq-выражения в другие функции может быть чревато. Например, потерей соединения с DB, из которой они извлекают данные.
Т.е. если извлекать данные сразу на месте, то соединение не потеряется? Т.е. функции при передаче куда-то где-то задерживаются?

Ты реально не понимаешь, о чём я? Или так, шутки такие?
...
Рейтинг: 0 / 0
except между list<object>
    #39721866
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Тогда щаз код дам)
...
Рейтинг: 0 / 0
except между list<object>
    #39721872
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомПередавать ленивые linq-выражения в другие функции может быть чревато.да, но речь шла всего лишь о том, чтобы получить список ID
Код: c#
1.
a.Select(n => n.Id).Except(b.Select(n => n.Id)).ToList()

без промежуточной материализации, я удивился что в знаниях Пети оказался такой большой пробел
...
Рейтинг: 0 / 0
except между list<object>
    #39721876
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123коллекция selectSelect не является коллекцией, дальше можно не читать
...
Рейтинг: 0 / 0
except между list<object>
    #39721882
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА переделайте на массивы структур. 21712277
...
Рейтинг: 0 / 0
except между list<object>
    #39721886
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProskyANAА переделайте на массивы структур. 21712277
Я это видел. Там ни слова про массивы.
...
Рейтинг: 0 / 0
except между list<object>
    #39721888
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proбез промежуточной материализации, я удивился что в знаниях Пети оказался такой большой пробел у меня тот ж код но без конвейера и ToList()
Ты поторопился и я тобой не удивлен.
...
Рейтинг: 0 / 0
except между list<object>
    #39721890
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123коллекция selectSelect не является коллекцией, дальше можно не читатьтупишь?
Коллекция Точка оператор select
))) не торопись писать.
...
Рейтинг: 0 / 0
except между list<object>
    #39721891
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЯ это видел. Там ни слова про массивы.Ну List - это тоже массив в некотором смысле, с точки зрения решения задачи разницы не будет

Что-то вот только ТС запропал куда-то. Наверное не успевает пробовать все то, что ему предложили
...
Рейтинг: 0 / 0
except между list<object>
    #39721896
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Массив тут антипаттерн.
...
Рейтинг: 0 / 0
except между list<object>
    #39721969
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Shocker.Pro,
Массив тут антипаттерн.
С чего вдруг?
...
Рейтинг: 0 / 0
except между list<object>
    #39721995
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAPetro123Shocker.Pro,
Массив тут антипаттерн.
С чего вдруг?это хто?
Я разве с вами? У меня тут фильтр стоит. Я Shocker.Pro отвечал.
...
Рейтинг: 0 / 0
except между list<object>
    #39722001
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123skyANAпропущено...

С чего вдруг?это хто?
Я разве с вами? У меня тут фильтр стоит. Я Shocker.Pro отвечал.
Что-то фиговый у тебя фильтр.
...
Рейтинг: 0 / 0
except между list<object>
    #39722100
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Shocker.Pro,
Массив тут антипаттерн.С чего вдруг?

Если коллекция не изменяется с момента создания, то создавать List избыточно, достаточно ToArray
...
Рейтинг: 0 / 0
except между list<object>
    #39722110
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕсли коллекция не изменяется с момента создания, то создавать List избыточно, достаточно ToArrayна Метод решения не тянет. Это же просто окончательный формат результата.
Можно и через разделители)).
...
Рейтинг: 0 / 0
except между list<object>
    #39722114
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123Shocker.Pro,
Массив тут антипаттерн.С чего вдруг?

Если коллекция не изменяется с момента создания, то создавать List избыточно, достаточно ToArray
Я вообще про то, что и dev и BD - это массивы, а не к чему результат Except приводить.
...
Рейтинг: 0 / 0
except между list<object>
    #39722122
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Код: c#
1.
a.Select(n => n.Id).Except(b.Select(n => n.Id)).

это решение.
А материализация или формат на выходе это ньюансы.
Хоть ToHtml()
...
Рейтинг: 0 / 0
except между list<object>
    #39722125
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Shocker.Pro
Код: c#
1.
a.Select(n => n.Id).Except(b.Select(n => n.Id)).


это решение.
А материализация или формат на выходе это ньюансы.
Хоть ToHtml()Ты предлагал другое:
Код: c#
1.
a.Select(n => n.Id).ToList().Except(b.Select(n => n.Id).ToList())....

и я сказал, что промежуточная материализация избыточна
...
Рейтинг: 0 / 0
except между list<object>
    #39722141
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомПередавать ленивые linq-выражения в другие функции может быть чревато.Как то раз у меня yield поднимался на десяток уровней:
цикл просмотра папок на ftp
цикл просмотра zip-файлов в папке + выборочное скачивание
цикл просмотра файлов внутри архива + выборочная распаковка
цикл просмотра узлов в полученном xml
цикл просмотра подузлов
yield

и ничего - работало. Такой подход позволял прервать весь стек, когда нужная информация найдена, и был предельно нагляден
...
Рейтинг: 0 / 0
except между list<object>
    #39722144
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProАгнец за бортомПередавать ленивые linq-выражения в другие функции может быть чревато.Как то раз у меня yield поднимался на десяток уровней:
цикл просмотра папок на ftp
цикл просмотра zip-файлов в папке + выборочное скачивание
цикл просмотра файлов внутри архива + выборочная распаковка
цикл просмотра узлов в полученном xml
цикл просмотра подузлов
yield

и ничего - работало. Такой подход позволял прервать весь стек, когда нужная информация найдена, и был предельно нагляден

Я просто обратил внимание, что linq-выражение без материализации "вычисляются" не по месту объявления, а по месту начала итерирования/материализации.
...
Рейтинг: 0 / 0
except между list<object>
    #39722148
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомЯ просто обратил внимание, что linq-выражение без материализации "вычисляются" не по месту объявления, а по месту начала итерирования/материализации.В смысле "обратил внимание"???
Вообще-то так и задумано.
...
Рейтинг: 0 / 0
except между list<object>
    #39722149
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Материализация - это и есть итерирование - масло масляное
...
Рейтинг: 0 / 0
except между list<object>
    #39722154
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProВообще-то так и задумано.

Ну не твоё же. Не всем это оказалось известно.
...
Рейтинг: 0 / 0
except между list<object>
    #39722155
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProМатериализация - это и есть итерирование - масло масляное

Ну... Как бы нет. Результат разный.
...
Рейтинг: 0 / 0
except между list<object>
    #39722159
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомНу... Как бы нет. Результат разный.итерирование выдаст материальный результат, а уж сложишь ты его в массив или в dev/null - значения не имеет )
...
Рейтинг: 0 / 0
except между list<object>
    #39722161
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТы предлагал другое:
Код: c#
1.
a.Select(n => n.Id).ToList().Except(b.Select(n => n.Id).ToList())....


любишь ты за других думать.
Не думай о других плохо услышав слово "копия".
"Это избыточно" (с)
...
Рейтинг: 0 / 0
except между list<object>
    #39722170
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123любишь ты за других думать.
Не думай о других плохо услышав слово "копия".сказано было четко и ясно
Petro123создать копию списка
List<string>
...
Рейтинг: 0 / 0
except между list<object>
    #39722237
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123любишь ты за других думать.
Не думай о других плохо услышав слово "копия".сказано было четко и ясно
Petro123создать копию списка
List<string>
Код: c#
1.
2.
3.
var iEnum = a.Select(p...id);
var iEnum2 = b. Select(p... Id) ;
var c = iEnum. ToList(). Intersect(iEnum2) ;


Выше говорил что у тебя просто конвейер.
Не стоит обсуждения такие мелочи.
Все знают что в конвейре глупо писать два раза toList
...
Рейтинг: 0 / 0
except между list<object>
    #39722249
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа отмазался - "все знают"
...
Рейтинг: 0 / 0
except между list<object>
    #39722257
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proтипа отмазался - "все знают" тебя торопыгу тоже все знают)
Не спорь понапрасну.
...
Рейтинг: 0 / 0
except между list<object>
    #39722669
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я сравниваю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
foreach (var item in list1)
{
    if (list2.Where(c => c.vopros == item.vopros).Count() == 0)
    {
        list3.Add(item);
    }
}


но в одном списке больше 2 млн и в другом тоже и получается очень долго.
можно ускориться как-то ?
...
Рейтинг: 0 / 0
except между list<object>
    #39722674
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecя сравниваю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
foreach (var item in list1)
{
    if (list2.Where(c => c.vopros == item.vopros).Count() == 0)
    {
        list3.Add(item);
    }
}



но в одном списке больше 2 млн и в другом тоже и получается очень долго.
можно ускориться как-то ?

А ты из крутых.
...
Рейтинг: 0 / 0
except между list<object>
    #39722675
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
))
NewIvanovecбольше 2 млнкак получил?
...
Рейтинг: 0 / 0
except между list<object>
    #39722678
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щаз опять пропадет на неделю.
...
Рейтинг: 0 / 0
except между list<object>
    #39722686
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получил из базы.
на клиентской стороне имеет смысл сравнивать или на стороне сервера это сделать?
...
Рейтинг: 0 / 0
except между list<object>
    #39722688
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecя сравниваю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
foreach (var item in list1)
{
    if (list2.Where(c => c.vopros == item.vopros).Count() == 0)
    {
        list3.Add(item);
    }
}



но в одном списке больше 2 млн и в другом тоже и получается очень долго.
можно ускориться как-то ?

list2.Any? без Count
...
Рейтинг: 0 / 0
except между list<object>
    #39722689
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecполучил из базы.
на клиентской стороне имеет смысл сравнивать или на стороне сервера это сделать?правило программиста1 - пишем на том на чем умеем.
Умеем в базе значит там. Ну или где бы ты хотел.
...
Рейтинг: 0 / 0
except между list<object>
    #39722692
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecна клиентской стороне имеет смысл сравнивать или на стороне сервера это сделать?Конечно на стороне базы, зачем тащить миллионы записей на клиента, чтобы потом оставить только несколько. Тут самое большое время уйдет даже не на отбор на клиенте, а не переброску данных и создание огромного массива на клиенте.
...
Рейтинг: 0 / 0
except между list<object>
    #39722713
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        public static void Main()
        {
            var list1 = Enumerable.Range(0, 2000000).Select(x => new Doc { vopros = x.ToString() }).ToList();
            var list2 = Enumerable.Range(1000000, 3000000).Select(x => new Doc { vopros = x.ToString() }).ToList();

            //С компаратором
            var stopwatch = new Stopwatch();
            stopwatch.Start();
            var result = list1.Except(list2, new DocComparer()).ToList();
            stopwatch.Stop();

            Console.WriteLine($"With comparator it takes {stopwatch.Elapsed.TotalMilliseconds.ToString()} milliseconds");


            var stopwatch1 = new Stopwatch();
            stopwatch1.Start();
            // без компаратора
            var result2 = list1.Select(x => new { list = 1, el = x }).Distinct()
                .Concat(list2.Select(x => new { list = 2, el = x }).Distinct())
                .GroupBy(x => x.el.vopros)
                .Where(x => x.Count() == 1)
                .SelectMany(x => x)
                .Where(x => x.list == 1)
                .ToList();

            stopwatch1.Stop();

            Console.WriteLine($"With pure LINQ it takes {stopwatch1.Elapsed.TotalMilliseconds.ToString()} milliseconds");

            Console.ReadLine();

        }


        public class DocComparer : IEqualityComparer<Doc>
        {
            public bool Equals(Doc x, Doc y)
            {
                return x.vopros == y.vopros;
            }

            public int GetHashCode(Doc obj)
            {
                return obj.vopros.GetHashCode();
            }
        }

        public class Doc 
        {            
            public String vopros { get; set; }
        }
    }
}
...
Рейтинг: 0 / 0
except между list<object>
    #39722718
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Тебе рядом IL код не нравился, а тут чем пугаешь автора?))
...
Рейтинг: 0 / 0
except между list<object>
    #39722722
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Агнец за бортом,
Тебе рядом IL код не нравился, а тут чем пугаешь автора?))

Вообще тебя не понял. Готовое решение, тебе не нравится?
...
Рейтинг: 0 / 0
except между list<object>
    #39722725
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecя сравниваю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
foreach (var item in list1)
{
    if (list2.Where(c => c.vopros == item.vopros).Count() == 0)
    {
        list3.Add(item);
    }
}



но в одном списке больше 2 млн и в другом тоже и получается очень долго.
можно ускориться как-то ?
У Вас же List<T> используется, зачем Linq?

List<T>.Exists(Predicate<T>)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
foreach (var item in list1)
{
    if (list2.Exists(c => c.vopros == item.vopros))
    {
        continue;
    }

    list3.Add(item);
}
...
Рейтинг: 0 / 0
except между list<object>
    #39722727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомPetro123Агнец за бортом,
Тебе рядом IL код не нравился, а тут чем пугаешь автора?))

Вообще тебя не понял. Готовое решение, тебе не нравится?для автора сложно. Ему 1 или 3 строки надо.
...
Рейтинг: 0 / 0
except между list<object>
    #39722729
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123для автора сложно. Ему 1 или 3 строки надо.

Как в этом куске треша?

skyANA
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
foreach (var item in list1)
{
    if (list2.Exists(c => c.vopros == item.vopros))
    {
        continue;
    }

    list3.Add(item);
}
...
Рейтинг: 0 / 0
except между list<object>
    #39722736
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Угу))
Код: c#
1.
2.
ЦИКЛ ТО
    ПОКА УСЛОВИЕ... 
...
Рейтинг: 0 / 0
except между list<object>
    #39722749
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Агнец за бортом,
Угу))
Код: c#
1.
2.
ЦИКЛ ТО
    ПОКА УСЛОВИЕ... 



With comparator it takes 6,8047 milliseconds
With pure LINQ it takes 44,5104 milliseconds
skyana trash it takes 4131,9624 milliseconds

Короче, на двух лямах объектов код от skyana уходит в глубокий анабиоз.

Это на 20 000 объектах, иначе никак - время растёт по экспоненте.

Сложность алгоритма? Не, не слышали.
...
Рейтинг: 0 / 0
except между list<object>
    #39722751
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Агнец за бортомNewIvanovec,

int GetHashCode(Doc obj)
{
return obj.vopros.GetHashCode();
}


Большое спасибо. пробую применить.
Если у меня 2 поля в объекте, тогда как будет выглядеть хэш таблица
Код: c#
1.
2.
3.
4.
      public int GetHashCode(Doc obj)
            {
                return obj.vopros.GetHashCode();
            }
...
Рейтинг: 0 / 0
except между list<object>
    #39722752
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Да. Хороший пример.
...
Рейтинг: 0 / 0
except между list<object>
    #39722761
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у List<T> кстати, есть бинарный поиск BinarySearch, список должен конечно же быть отсортирован. у него сложность O(log n)
...
Рейтинг: 0 / 0
except между list<object>
    #39722832
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё раз большое спасибо!
последний пример от Агнец за бортом в моём случае за секунды сделал except на 2 млн
...
Рейтинг: 0 / 0
except между list<object>
    #39722842
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovec,

хеш не гарантирует уникальность, хеш-таблица устроена немного сложнее
...
Рейтинг: 0 / 0
except между list<object>
    #39722868
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомPetro123Агнец за бортом,
Угу))
Код: c#
1.
2.
ЦИКЛ ТО
    ПОКА УСЛОВИЕ... 




With comparator it takes 6,8047 milliseconds
With pure LINQ it takes 44,5104 milliseconds
skyana trash it takes 4131,9624 milliseconds

Короче, на двух лямах объектов код от skyana уходит в глубокий анабиоз.

Это на 20 000 объектах, иначе никак - время растёт по экспоненте.

Сложность алгоритма? Не, не слышали.
Самый быстрый способ решил найти?

Лови:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public struct Doc
{
    public readonly string vopros;

    public Doc(string vopros)
    {
        this.vopros = vopros;
    }

    public override int GetHashCode()
    {
        return vopros.GetHashCode();
    }
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var set = new HashSet<Doc>(Enumerable.Range(0, 2000000).Select(x => new Doc(x.ToString())));
var stopwatch2 = new Stopwatch();
stopwatch2.Start();

set.ExceptWith(list2);

stopwatch2.Stop();

Console.WriteLine($"With HashSet it takes {stopwatch2.Elapsed.TotalMilliseconds.ToString()} milliseconds");




With comparator it takes 1068.0949 milliseconds
With pure LINQ it takes 6091.5311 milliseconds
With HashSet it takes 573.9623 milliseconds
...
Рейтинг: 0 / 0
except между list<object>
    #39722895
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЛови

Че "лови", вынес создание сета за таймер и типа всех обманул?

Что ты за эмо такое, лажа за лажей.
...
Рейтинг: 0 / 0
except между list<object>
    #39722930
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомskyANAЛови

Че "лови", вынес создание сета за таймер и типа всех обманул?

Что ты за эмо такое, лажа за лажей.
Хочешь создание во всех случаях включитбь в таймер? Не вопрос:

With comparator it takes 2138.3912 milliseconds
With pure LINQ it takes 8084.1227 milliseconds
With HashSet it takes 1642.8458 milliseconds
...
Рейтинг: 0 / 0
88 сообщений из 88, показаны все 4 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / except между list<object>
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]