Есть ли метод Linq, чтобы сказать, что A является подмножеством B? [Дубликат]

1

Пусть у меня есть 2 массива string[] A = { "a", "b", "c" } и string[] B = { "a", "b", "c", "d", "e" },

Есть ли какой-либо метод, который может прямо сказать, что A является подмножеством B? Кроме того, вы просто удалите отдельные элементы B, но не укажете, полностью ли это подмножество B.

Спасибо за помощь.

Теги:
linq

4 ответа

9

вы можете сделать это, просто:

A.All(B.Contains);

И вы можете проверить Length чтобы убедиться, что они не одного размера, а A - подмножество

bool isSubset = A.All(B.Contains) && A.Length < B.Length;
  • 0
    AFAIK, любой набор является подмножеством самого себя.
  • 0
    @ Да, приведенная выше проверка понадобится только для правильного подмножества.
Показать ещё 5 комментариев
8

Там даже метод для этой цели. Вы можете использовать HastSet<T>.IsSubsetOf:

var aSet = new HashSet<string>(A);
bool isASubsetOfB = aSet.IsSubsetOf(B);
  • 0
    Это не LINQ, хотя. Но, возможно, это более эффективно, чем использование linq.
  • 0
    @DeCaf: зачем использовать LINQ, если уже есть читаемый и эффективный метод?
Показать ещё 4 комментария
3

Это должно работать

bool isSubSet = !A.Except(B).Any();
  • 2
    Вероятно, следует отрицать это для удобства чтения, нет? A ⊆ B является ложным для примера, приведенного при использовании этого кода, и это выглядит запутанным.
  • 0
    В этом случае сделайте его методом расширения, таким как IsSubsetOf() .
Показать ещё 3 комментария
2

Вы можете комбинировать SequenceEquals и Intersect:

var isASubsetOfB = B.Intersect(A).SequenceEqual(A)
  • 1
    Убедитесь, что вы действительно заботитесь о порядке при использовании этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню