Bagaimana cara memeriksa apakah suatu nilai ada dalam array di C #?
Seperti, saya ingin membuat array dengan daftar nama printer.
Ini akan diumpankan ke metode, yang akan melihat setiap string secara bergantian, dan jika string tersebut sama dengan nilai dalam array, lakukan tindakan itu.
Sebagai contoh:
string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
PrinterSetup(p);
}
Ini adalah nama-nama printer, mereka diumpankan ke metode PrinterSetup.
PrinterSetup akan terlihat seperti ini (beberapa pseudocode):
public void PrinterSetup(printer)
{
if (printer == "jupiter")
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}
Bagaimana if (printer == "jupiter")
cara memformat dengan cara yang dikenali C #?
printer.Equals("jupiter")
. Jika yang pertama, gunakanlinq
danprinter.Contains("jupiter")
printer.Equals("jupiter")
... Kode OPif (printer == "jupiter")
berfungsi dengan baik ... selamaprinter
dinyatakan sebagai string, seperti yang dicatat Skeet.Jawaban:
Tambahkan namespace yang diperlukan
Kemudian Anda dapat menggunakan
Contains()
metode LINQsumber
How do I check if a value is in an array in C#?
) dan juga efisien. Tidak ada loop tanpa metode tambahan. Hanya namespace ekstra yang bukan hal yang besar.((IList)printer).Contains("Jupiter")
yang non-generik (mungkin jenis nilai kotak dll.) Dan bekerja bahkan untuk array multi-dimensi. Dan sejak .NET 2.0 kami memiliki lebih banyak keajaiban((IList<string>)printer).Contains("Jupiter")
yang lebih aman untuk jenis. Pendekatan LINQ baru di .NET 3.5.1) Benar 2) Salah 3) Benar 4) Salah
sumber
sumber
Sesuatu seperti ini?
sumber
sumber
a
array multidimensi (sepertinew string[10, 20, 15]
misalnya), dengan pengecualian. Ini juga akan gagal dengan array satu dimensi yang tidak diindeks dari nol (sepertiArray.CreateInstance(typeof(string), new[] { 5, }, new[] { -2, })
, jarang di C # saya akui), dengan kemungkinan nilai kembali yang salah. Kekurangan ini mudah diperbaiki dengan obat generik:public static bool Contains<TElement>(TElement[] a, TElement val) { return Array.IndexOf(a, val) != -1; }
Catatan: Pertanyaannya adalah tentang array string. Rutinitas yang disebutkan tidak boleh dicampur dengan metode .Contains dari string tunggal.
Saya ingin menambahkan jawaban tambahan yang mengacu pada versi C # yang berbeda dan karena dua alasan:
Jawaban yang diterima membutuhkan Linq yang merupakan idiomatik C # meskipun tidak datang tanpa biaya, dan tidak tersedia dalam C # 2.0 atau lebih rendah. Ketika sebuah array terlibat, kinerja mungkin penting, jadi ada situasi di mana Anda ingin tetap menggunakan metode Array.
Tidak ada jawaban yang secara langsung menangani pertanyaan di mana ia diminta juga untuk menempatkan ini dalam suatu fungsi (Karena beberapa jawaban juga mencampur string dengan deretan string, ini tidak sepenuhnya tidak penting).
Array.Exists () adalah metode C # /. NET 2.0 dan tidak membutuhkan Linq. Pencarian dalam array adalah O (n). Untuk akses yang lebih cepat, gunakan HashSet atau koleksi serupa.
Sejak .NET 3.5 ada juga metode umum
Array<T>.Exists()
:Anda dapat menulis metode ekstensi sendiri (C # 3.0 dan yang lebih baru) untuk menambahkan gula sintaksis untuk mendapatkan ".Contains" yang sama / serupa seperti untuk string untuk semua larik tanpa menyertakan Linq:
Dalam hal ini
ArrayContains()
metode ini digunakan dan bukan metode Berisi Linq.Metode. Berisi yang disebutkan di tempat lain merujuk ke
List<T>.Contains
(sejak C # 2.0) atauArrayList.Contains
(sejak C # 1.1), tetapi tidak ke array itu sendiri secara langsung.sumber
Anda baru saja melewatkan sesuatu dalam metode Anda:
Tambahkan saja
string
dan Anda akan baik-baik saja.sumber
Tidak terlalu jelas apa masalah Anda, tetapi sepertinya Anda menginginkan sesuatu seperti ini:
sumber
Pertimbangkan untuk menggunakan
HashSet<T>
Kelas demi kinerja pencarian:Sebagai contoh:
sumber
Sekarang saya mencari lebih dari 2 jam untuk menemukan cara yang baik bagaimana menemukan duplikat dalam daftar dan bagaimana menghapusnya . Inilah jawaban paling sederhana:
Outputnya akan terlihat seperti ini: Elemen Duplikat akan dihapus dalam daftar baru yang disebut berbeda!
sumber