LINQ: Сравнить две последовательности
От: Аноним  
Дата: 27.08.10 10:49
Оценка:
Даны две последовательности а и b. Нужно сравнить их не учитывая порядок следования элементов (он может быть разный), т.е. что все элементы из a есть в b и наоборот.

Какие могут быть еще вариынт кроме тупого a.OrderBy(...).SequenceEquals(b.OrderBy(...))?

Спасибо.
Re: LINQ: Сравнить две последовательности
От: Lloyd Россия  
Дата: 27.08.10 10:56
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Даны две последовательности а и b. Нужно сравнить их не учитывая порядок следования элементов (он может быть разный), т.е. что все элементы из a есть в b и наоборот.


А>Какие могут быть еще вариынт кроме тупого a.OrderBy(...).SequenceEquals(b.OrderBy(...))?


Except?
Re[2]: LINQ: Сравнить две последовательности
От: Аноним  
Дата: 27.08.10 11:03
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Except?


тоже так думал но не будет работать если в b есть все что есть в а но еще другие элементы:

a — 1 2 3
b — 1 2 3 4 5

a.Except(b) — неверный результат
Re: LINQ: Сравнить две последовательности
От: QrystaL Украина  
Дата: 27.08.10 11:07
Оценка:
var s1 = new[] { 1, 2, 3 };
var s2 = new[] { 1, 2, 3, 1, 2, 3 };


считать не равными?
Re[3]: LINQ: Сравнить две последовательности
От: master_of_shadows Беларусь  
Дата: 27.08.10 11:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>тоже так думал но не будет работать если в b есть все что есть в а но еще другие элементы:


А>a — 1 2 3

А>b — 1 2 3 4 5

А>a.Except(b) — неверный результат


Добавить a.Count() == b.Count() ?
Re[2]: LINQ: Сравнить две последовательности
От: Аноним  
Дата: 27.08.10 11:09
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>
QL>var s1 = new[] { 1, 2, 3 };
QL>var s2 = new[] { 1, 2, 3, 1, 2, 3 };
QL>


QL>считать не равными?


пардон, последовательности уникальных элементов
Re: LINQ: Сравнить две последовательности
От: Mihas  
Дата: 27.08.10 11:14
Оценка:
А>Даны две последовательности а и b. Нужно сравнить их не учитывая порядок следования элементов (он может быть разный), т.е. что все элементы из a есть в b и наоборот.
А>Какие могут быть еще вариынт кроме тупого a.OrderBy(...).SequenceEquals(b.OrderBy(...))?

Я сделал в лоб:
Для каждого элемента в первой последовательности ищу эквивалентный во второй и помечаю его как "найденный".
Для поиска использую LINQ, да и свой метод оформил как экстендер. Получается, я в теме
Re: LINQ: Сравнить две последовательности
От: _FRED_ Черногория
Дата: 27.08.10 11:18
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Даны две последовательности а и b. Нужно сравнить их не учитывая порядок следования элементов (он может быть разный), т.е. что все элементы из a есть в b и наоборот.


А>Какие могут быть еще вариынт кроме тупого a.OrderBy(...).SequenceEquals(b.OrderBy(...))?


Равны ли такие последовательности: { 1, 1, } и { 1, }?
Если их можно считать равными, то
var result = new HashSet<T>(left).SetEquals(right);
Help will always be given at Hogwarts to those who ask for it.
Re[3]: LINQ: Сравнить две последовательности
От: Lloyd Россия  
Дата: 27.08.10 11:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>тоже так думал но не будет работать если в b есть все что есть в а но еще другие элементы:


А>a — 1 2 3

А>b — 1 2 3 4 5

А>a.Except(b) — неверный результат


Except внутрях просто заливает обе последовательности в HashSet-ы и экстрактит один из другого. Сделай так же в своем коде.
Re[4]: LINQ: Сравнить две последовательности
От: Lloyd Россия  
Дата: 27.08.10 11:44
Оценка:
Здравствуйте, Lloyd, Вы писали:

А>>a.Except(b) — неверный результат


L>Except внутрях просто заливает обе последовательности в HashSet-ы и экстрактит один из другого. Сделай так же в своем коде.


смотри метод SymmetricExceptWith
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.