LINQ: Определите, содержат ли две последовательности точно те же элементы

Просто оберните изображение в элемент управления «Граница»

<Border BorderThickness="1">
    <Image Name="imgPic1"
           Width="100"
           Height="75"
           Stretch="Fill"
           VerticalAlignment="Top" />
</Border>

Вы также можете предоставить стиль, который вы применяете к изображениям, который делает это, если вы не хотите делать это вокруг каждого изображения


Окончательное решение от ответа и комментариев, добавленных Паксом:

<Border BorderThickness="1"
        BorderBrush="#FF000000"
        VerticalAlignment="Top">
    <Image Name="imgPic1"
           Width="100"
           Height="75"
           Stretch="Fill"
           VerticalAlignment="Top"/>
</Border>
66
задан Peter Mortensen 19 May 2018 в 11:07
поделиться

5 ответов

Если вы хотите обрабатывать массивы как «наборы» и игнорировать порядок и дублирование элементов, вы можете использовать ] HashSet .SetEquals метод :

var isEqual = new HashSet<int>(first).SetEquals(second);

В противном случае лучше всего сортировать обе последовательности одинаковым образом и использовать SequenceEqual для их сравнения.

113
ответ дан 24 November 2019 в 14:53
поделиться
  1. Сначала проверьте длину. Если они разные, то наборы разные.
  2. вы можете выполнить data.Intersect (otherData); и проверить идентичность длины.
  3. ИЛИ, упростить сортировку наборов и выполнить итерацию их.
45
ответ дан 24 November 2019 в 14:53
поделиться

Если у вас могут быть дубликаты (или если вам нужно решение, которое лучше работает для более длинных списков), я бы попробовал что-то вроде этого:

static bool IsSame<T>(IEnumerable<T> set1, IEnumerable<T> set2)
{
    if (set1 == null && set2 == null)
        return true;
    if (set1 == null || set2 == null)
        return false;

    List<T> list1 = set1.ToList();
    List<T> list2 = set2.ToList();

    if (list1.Count != list2.Count)
        return false;

    list1.Sort();
    list2.Sort();

    return list1.SequenceEqual(list2);
}

ОБНОВЛЕНИЕ: ой, ребята, вы правы - Приведенное ниже решение кроме () должно смотреть в обе стороны, прежде чем переходить улицу. И у него паршивая производительность для длинных списков. Игнорируйте предложение ниже! : -)

Вот один простой способ сделать это. Обратите внимание, что это предполагает, что в списках нет дубликатов.

bool same = data.Except (otherData).Count() == 0;
3
ответ дан 24 November 2019 в 14:53
поделиться

Это должно помочь:

    IEnumerable<int> data = new []{ 3,5,6,9 };
    IEnumerable<int> otherData = new[] {6, 5, 9, 3};

    if(data.All(x => otherData.Contains(x)))
    {
        //Code Goes Here
    }
-1
ответ дан 24 November 2019 в 14:53
поделиться
  1. Сначала проверьте длину. Если они разные, то наборы разные.
  2. вы можете сделать data.Intersect (otherData); и проверить идентичность длины.
  3. ИЛИ, упростить сортировку наборов и выполнить итерацию их.
0
ответ дан 24 November 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: