Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
7 / 7 / 1
Регистрация: 02.03.2011
Сообщений: 310

Найти пересечение множеств, представленных двумя последовательностями

27.10.2018, 12:42. Показов 2054. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две коллекции.
C#
1
2
3
4
5
6
    Product[] store1 = {new Product { Name = "orange", Code = 4, InStock = true  },
                       new Product { Name = "orange", Code = 4, InStock = false  } };
 
            Product[] store2 = { new Product { Name = "apple", Code = 9 },
                      new Product { Name = "orange", Code = 4 },
                       new Product { Name = "lemon", Code = 12 } };
Воспользовался для поиска методом Intersect, создал компаратор из справки майкрософт, но возникла проблема с тем, что Intersect возвращает различающиеся элементы последовательности.
Т.е. он удалит из коллекции апельсин у которого InStock = false и вернет только апельсин у которого InStock = true,
А мне нужно, чтоб вернулись оба апельсина.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2018, 12:42
Ответы с готовыми решениями:

Найти пересечение двух множеств и вывести данное пересечение и кол-во элементов в нем
Здравствуйте, помогите, пожалуйста, дорешать задачу. Условие: найти пересечение двух множеств и вывести данное пересечение и кол-во...

Найти пересечение множеств
Есть: List<long> list1 и List<long> list2. Надо сделать список, где будут общие элементы, которые входят как в 1-й, так и во 2-й. ...

Найти пересечение двух множеств
В C# найти пересечение множеств, которые вводятся рендомно, и из этого пересечения вывести на экран только четные! Желательно в форме...

2
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.10.2018, 13:26
Лучший ответ Сообщение было отмечено xxxspeed как решение

Решение

xxxspeed,
Ну во-первых, Intersect работает правильно. Потому что пересечение множеств подразумевает что отбираются одинаковые элементы. Они и отбираются. Кроме того, множество не может содержать два одинаковых элемента. Поэтому, даже если считать, что продукты с разным InStock - равны между собой, то все равно в результирующем множестве их не будет два.
Поэтому нужно отказаться от Intersect - он не делает то, что вам нужно.
А использовать такой код:
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
    class Program
    {
        static void Main(string[] args)
        {
            Product[] store1 = { new Product { Name = "orange", Code = 4, InStock = true },
                                 new Product { Name = "orange", Code = 4, InStock = false } };
 
            Product[] store2 = { new Product { Name = "apple", Code = 9 },
                                 new Product { Name = "orange", Code = 4 },
                                 new Product { Name = "lemon", Code = 12 } };
 
            var hash = new HashSet<string>(store2.Select(p => p.Key));
            var filtered = store1.Where(p => hash.Contains(p.Key)).ToArray();
        }
    }
 
    class Product
    {
        public string Name { get; set; }
        public int Code { get; set; }
        public bool InStock { get; set; }
 
        public string Key
        {
            get { return Name +":"+ Code; }
        }
    }
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
28.10.2018, 08:03
Можно отмотать 20 лет назад и применить распространённую в то время практику MS SQL:
- Сначала выполни декартово произведение двух таблиц, а дальше хоть трава не расти.

Пожалуй, так и поступим.
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
using System;
using System.Linq;
 
namespace Question2340926
{
    class Program
    {
        static void Main(string[] args)
        {
            Product[] store1 = {
                new Product { Name = "orange", Code = 4, InStock = true },
                new Product { Name = "orange", Code = 4, InStock = false }
            };
 
            Product[] store2 = {
                new Product { Name = "apple", Code = 9 },
                new Product { Name = "orange", Code = 4 },
                new Product { Name = "lemon", Code = 12 }
            };
 
            foreach (var item in store2.SelectMany(e1 => store1.Where(e2 => e2.Code == e1.Code)))
            {
                Console.WriteLine($"{item.Code} {item.Name} {item.InStock}");
            }
 
            Console.ReadKey();
        }
    }
 
    public sealed class Product
    {
        public string Name { get; set; }
        public int Code { get; set; } // По названию явно идентификатор продукта
        public bool InStock { get; set; }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2018, 08:03
Помогаю со студенческими работами здесь

[SimComp] Найти пересечение двух множеств чисел, представленных двумя введёнными массивами (нужны комментарии)
*Найти пересечение двух множеств чисел, пердставленных двумя введёнными массивами start in sty n1 zero sta i loop1 lda i ...

Найти пересечение множеств
Пусть сгенерированные на ЭВМ множества А, В, С состоят из элементов: А = {1, 3, 4, 5, 10}, B = {3, 5, 7, 8, 9}, C = {3, 5, 6 , 9, 10}. ...

Найти пересечение множеств
Задание: Дано 2 предложения. Составить два множества: первое содержит слова из первого предложения, а второе - из второго предложения....

Найти пересечение множеств
Даны три множества , , . Найти пересечение этих множеств.

Найти пересечение и объединение множеств
V. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над множествами: 1) заполнение и определение количества...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru