Apa cara terbaik untuk melihat di string[]
untuk melihat apakah itu berisi elemen. Ini adalah kesempatan pertama saya. Tapi mungkin ada sesuatu yang saya abaikan. Ukuran larik tidak boleh lebih dari 200 elemen.
bool isStringInArray(string[] strArray, string key)
{
for (int i = 0; i <= strArray.Length - 1; i++)
if (strArray[i] == key)
return true;
return false;
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
Saya tahu ini sudah lama, tetapi saya ingin pembaca baru mengetahui bahwa ada metode baru untuk melakukan ini menggunakan metode generik dan ekstensi.
Anda dapat membaca posting blog saya untuk melihat informasi lebih lanjut tentang bagaimana melakukan ini, tetapi ide utamanya adalah ini:
Dengan menambahkan metode ekstensi ini ke kode Anda:
Anda dapat melakukan pencarian seperti ini:
Ini berfungsi pada semua jenis (selama Anda membuat metode sama dengan yang baik). Jenis nilai apa pun pasti.
sumber
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
yang ingin saya lakukan adalah melihat siapa yang dapat dikategorikan di kolom pertama untuk melihat apakah nilai tidak berakhir di salah satu string berikut .. jika tidak maka saya ingin mengembalikan string yang menyatakan bahwa itu kehilangan nilai.00
misalnya menggunakan contoh Anda.Saya tidak bisa mendapatkan yang ini untuk bekerja itu agak rumit karena saya tidak ingin mengembalikan bool Saya mengubah metode Anda untuk mengembalikan string tetapi masih tidak berfungsi saran apa punpublic static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Anda hanya setelah fungsi Array.Exists (atau metode ekstensi Berisi jika Anda menggunakan .NET 3.5, yang sedikit lebih nyaman).
sumber
Linq (untuk s & g):
atau, tergantung pada kebutuhan
sumber
Apakah array sudah diurutkan? Jika demikian, Anda dapat melakukan pencarian biner . Berikut adalah implementasi NET juga. Jika larik diurutkan maka pencarian biner akan meningkatkan kinerja atas solusi iteratif apa pun.
sumber
Secara umum, array adalah struktur data yang buruk untuk digunakan jika Anda ingin bertanya apakah ada objek tertentu dalam koleksi atau tidak.
Jika Anda akan sering menjalankan pencarian ini, mungkin lebih baik menggunakan
Dictionary<string, something>
daripada menggunakan array. Pencarian dalam Dictionary adalah O (1) (waktu-konstan), sedangkan pencarian melalui array adalah O (N) (membutuhkan waktu yang sebanding dengan panjang array).Meskipun lariknya paling banyak hanya 200 item, jika Anda melakukan banyak pencarian ini, Kamus kemungkinan akan lebih cepat.
sumber
Anda juga dapat menggunakan LINQ untuk melakukan iterasi pada array. atau Anda dapat menggunakan metode Temukan yang membutuhkan delegasi untuk mencarinya. Namun saya pikir metode find sedikit lebih mahal daripada hanya perulangan.
sumber
Seperti yang sering disebutkan di utas di atas, ini bergantung pada kerangka kerja yang digunakan. .Net Framework 3 dan yang lebih baru memiliki metode .Contains () atau Exists () untuk array. Untuk framework lain di bawah ini, bisa melakukan trik berikut daripada melakukan perulangan melalui array ...
Tidak terlalu yakin dengan efisiensi ... Dave
sumber
Ini lebih cepat daripada mengulang melalui larik secara manual:
sumber
Jika Anda tidak ingin atau tidak bisa menggunakan LINQ Anda juga dapat menggunakan
Array.Exists(...);
fungsi statis :https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Ketika Predicate mengembalikan nilai true, catInside akan menjadi true juga.
sumber