Ini adalah solusi yang jauh lebih efisien daripada yang diposkan di sini, terutama solusi teratas:
bool isSubset = t2.All(elem => t1.Contains(elem));
Jika Anda dapat menemukan elemen tunggal di t2 yang tidak ada di t1, maka Anda tahu bahwa t2 bukan subset dari t1. Keuntungan dari metode ini adalah bahwa hal itu dilakukan semua di tempat, tanpa mengalokasikan ruang tambahan, tidak seperti solusi yang menggunakan .Except atau .Intersect. Lebih jauh lagi, solusi ini dapat pecah segera setelah menemukan satu elemen yang melanggar kondisi subset, sementara yang lain terus mencari. Di bawah ini adalah bentuk panjang optimal dari solusi, yang hanya sedikit lebih cepat dalam pengujian saya daripada solusi singkat di atas.
bool isSubset = true;
foreach (var element in t2) {
if (!t1.Contains(element)) {
isSubset = false;
break;
}
}
Saya melakukan beberapa analisis kinerja yang belum sempurna dari semua solusi, dan hasilnya sangat drastis. Kedua solusi ini sekitar 100x lebih cepat daripada .Except () dan .Intersect (), dan tidak menggunakan memori tambahan.