猿问

.NET是否可以检查List a是否包含List b中的所有项目?

我有以下方法:


namespace ListHelper

{

    public class ListHelper<T>

    {

        public static bool ContainsAllItems(List<T> a, List<T> b)

        {

            return b.TrueForAll(delegate(T t)

            {

                return a.Contains(t);

            });

        }

    }

}

其目的是确定一个列表是否包含另一个列表的所有元素。在我看来,类似的东西已经内置到.NET中了,是这样吗?我是否在复制功能?


编辑:抱歉我没有事先声明我正在Mono版本2.4.2上使用此代码。


慕哥9229398
浏览 841回答 3
3回答

大话西游666

如果您使用的是.NET 3.5,则很简单:public class ListHelper<T>{&nbsp; &nbsp; public static bool ContainsAllItems(List<T> a, List<T> b)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return !b.Except(a).Any();&nbsp; &nbsp; }}这个检查是否有任何元件在b其不在a-然后反转的结果。请注意,使该方法泛型而不是使类更传统,并且没有理由要求List<T>代替IEnumerable<T>-因此,这可能是更可取的:public static class LinqExtras // Or whatever{&nbsp; &nbsp; public static bool ContainsAllItems<T>(this IEnumerable<T> a, IEnumerable<T> b)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return !b.Except(a).Any();&nbsp; &nbsp; }}

POPMUISE

您也可以使用其他方式。覆盖等于并使用它public bool ContainsAll(List<T> a,List<T> check){&nbsp; &nbsp;list l = new List<T>(check);&nbsp; &nbsp;foreach(T _t in a)&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; if(check.Contains(t))&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;check.Remove(t);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(check.Count == 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp;}}
随时随地看视频慕课网APP
我要回答