powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / except между list<object>
25 сообщений из 88, страница 3 из 4
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
25 сообщений из 88, страница 3 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / except между list<object>
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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