Saya memiliki metode berikut:
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);
});
}
}
}
Tujuannya adalah untuk menentukan apakah sebuah List berisi semua elemen dari list lain. Tampaknya bagi saya bahwa sesuatu seperti ini akan dibangun ke dalam .NET, apakah itu masalahnya dan apakah saya menggandakan fungsionalitas?
Sunting: Mohon maaf karena tidak menyatakan sebelumnya bahwa saya menggunakan kode ini pada Mono versi 2.4.2.
Jawaban:
Jika Anda menggunakan .NET 3.5, itu mudah:
Ini memeriksa apakah ada elemen
b
yang tidak masuka
- dan kemudian membalikkan hasilnya.Perhatikan bahwa akan sedikit lebih konvensional untuk membuat metode generik daripada kelas, dan tidak ada alasan untuk mengharuskan
List<T>
daripadaIEnumerable<T>
- jadi ini mungkin lebih disukai:sumber
Disertakan dalam .NET 4: Enumerable.All
sumber
Hanya untuk bersenang-senang, jawaban @ JonSkeet sebagai metode perpanjangan:
sumber
public static bool ContainsAny<T>(this IEnumerable<T> haystack, IEnumerable<T> needle) { return haystack.Intersect(needle).Count() > 0; }
. Saya mencoba beberapa perbandingan kinerja yang cepathaystack.Count() - 1 >= haystack.Except(needle).Count();
danIntersect
sepertinya selalu melakukannya dengan lebih baik.Any()
jangan gunakanCount() > 0
:public static bool ContainsAny<T>(this IEnumerable<T> haystack, IEnumerable<T> needle) { return haystack.Intersect(needle).Any(); }
Anda juga bisa menggunakan cara lain. Ganti sama dan gunakan ini
sumber
list l = new List<T>(check);
Saya tidak berpikir ini akan dikompilasi dan jika ya, itu sama sekali tidak perlu karenacheck
sudah ada daftar