Saat mencari jawaban untuk pertanyaan ini, saya telah menemukan yang serupa menggunakan LINQ tapi saya belum bisa sepenuhnya memahaminya (dan dengan demikian, mengimplementasikannya), karena saya tidak terbiasa dengannya. Yang saya ingin, pada dasarnya, adalah ini:
- Periksa apakah ada elemen daftar yang berisi string tertentu.
- Jika ya, dapatkan elemen itu.
Sejujurnya aku tidak tahu bagaimana aku akan melakukan itu. Yang bisa saya pikirkan adalah ini (tidak berfungsi, tentu saja):
if (myList.Contains(myString))
string element = myList.ElementAt(myList.IndexOf(myString));
Saya tahu MENGAPA tidak berfungsi:
myList.Contains()
tidak kembalitrue
, karena akan memeriksa apakah seluruh elemen daftar cocok dengan string yang saya tentukan.myList.IndexOf()
tidak akan menemukan kejadian, karena, seperti halnya lagi, itu akan memeriksa elemen yang cocok dengan string.
Namun, saya tidak tahu bagaimana menyelesaikan masalah ini, tetapi saya pikir saya harus menggunakan LINQ seperti yang disarankan dalam pertanyaan serupa dengan saya. Yang sedang berkata, jika itu yang terjadi di sini, saya ingin penjawab untuk menjelaskan kepada saya penggunaan LINQ dalam contoh mereka (seperti yang saya katakan, saya belum pernah repot-repot dengan waktu saya dengan C #). Terima kasih sebelumnya kawan (dan cewek?).
EDIT: Saya telah menemukan solusi; cukup loop melalui daftar, periksa apakah elemen saat ini berisi string dan kemudian setel string yang sama dengan elemen saat ini. Saya bertanya-tanya, apakah ada cara yang lebih efisien dari ini?
string myString = "bla";
string element = "";
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Contains(myString))
element = myList[i];
}
myString
, dalam loop Anda saat ini, Anda akan mendapatkan elemen terakhir. Itu tergantung pada Anda jika Anda ingin menemukan yang pertama atau terakhir, jika Anda hanya ingin menemukan yang pertama, maka pecahkan loop setelah menemukan item.Jawaban:
Anda harus dapat menggunakan Linq di sini:
Jika Anda hanya ingin mengembalikan item yang cocok pertama:
sumber
Where
denganFirstOrDefault
dalam kasus kedua AndamyList.FirstOrDefault(stringToCheck => stringToCheck.Contains(myString))
matching
ditentukan kompiler (var
)? Karena saya tahu daftar saya adalah tipeString
, apakah aman untuk digunakanstring matching
dalam kasus ini?Jawaban dasarnya adalah: Anda harus mengulang melalui loop dan memeriksa elemen apa pun yang berisi string yang ditentukan. Jadi, misalkan kodenya adalah:
Kode yang setara, tetapi singkat, adalah:
Di sini, x adalah parameter yang bertindak seperti "item" dalam kode di atas.
sumber
sumber
Putaran mode lama hampir selalu yang tercepat.
sumber
Jika Anda ingin daftar string yang berisi string Anda:
Pilihan lain adalah menggunakan Linq FirstOrDefault
Ingatlah bahwa
Contains
metode ini peka terhadap huruf besar-kecil.sumber
Anda bisa menggunakan
FirstOrDefault
metode ekstensi Linq :Ini akan mengembalikan elemen tinju yang berisi substring
myString
, ataunull
jika tidak ada elemen seperti itu ditemukan.Jika yang Anda butuhkan hanyalah indeks, gunakan metode
List<T>
kelasFindIndex
:Ini akan mengembalikan indeks elemen tinju yang berisi substring
myString
, atau-1
jika tidak ada elemen seperti itu ditemukan.sumber
Banyak jawaban bagus di sini, tetapi saya menggunakan yang sederhana menggunakan Exists , seperti di bawah ini:
sumber
Anda harus dapat menggunakan sesuatu seperti ini, itu berfungsi baik untuk saya:
atau sesuatu seperti ini, jika Anda perlu mencari di tempat yang tidak cocok.
sumber
kamu bisa memakai
LINQ memberi Anda kemampuan untuk "meminta" koleksi data apa pun. Anda dapat menggunakan sintaksis seperti kueri basis data (pilih, di mana, dll) pada koleksi (di sini koleksi (daftar) string).
jadi Anda melakukan seperti "ambilkan saya item dari daftar Di mana memenuhi kondisi yang diberikan"
di dalam Di mana Anda menggunakan "ekspresi lambda"
untuk mengatakan secara singkat ekspresi lambda adalah sesuatu seperti (input parameter => nilai pengembalian)
jadi untuk parameter "item", ia mengembalikan "item.Berisi (" string yang diperlukan ")". Jadi itu mengembalikan true jika item berisi string dan dengan demikian akan dipilih dari daftar karena memenuhi syarat.
sumber
Untuk membuatnya tetap sederhana, gunakan ini;
Atau, untuk melakukan ini dengan for loop, gunakan ini;
sumber
Saya belum melihat opsi bool di jawaban lain jadi saya harap kode di bawah ini akan membantu seseorang.
Gunakan saja
Any()
sumber
Dimungkinkan untuk menggabungkan Apa Saja, Dimana, Pertama dan Pertama atau Kesalahan; atau hanya menempatkan predikat di salah satu metode tersebut tergantung pada apa yang dibutuhkan.
Anda mungkin harus menghindari penggunaan First kecuali Anda ingin memiliki pengecualian yang dilemparkan ketika tidak ada kecocokan yang ditemukan. FirstOrDefault biasanya merupakan opsi yang lebih baik selama Anda tahu itu akan mengembalikan default tipe jika tidak ditemukan kecocokan (default string adalah nol, int adalah 0, bool salah, dll).
Uji kode ini @ https://rextester.com/TXDL57489
sumber