Memeriksa kondisi suatu item dalam daftar tanpa pendahuluan

pemrograman


Bagaimana saya bisa memeriksa kondisi suatu item dalam daftar tanpa menggunakan foreach. Misalnya, daripada harus melakukan:

C#
foreach(string[] item in mylist)
{
  if(Convert.ToBoolean(item[0]){}
}

Saya bisa mengakses item daftar saya secara langsung. Bagaimana saya bisa mencapainya?

Terima kasih!

Solusi 4

Pertama, Anda tidak mungkin menemukan item pertama dalam daftar yang cocok dengan suatu kondisi, atau, semua item dalam Daftar yang cocok dengan beberapa kondisi tanpa pengulangan: menggunakan Linq hanya akan “mengotomatiskannya” untuk Anda.

Pertanyaan yang perlu Anda klarifikasi di sini adalah apa sebenarnya kamu ingin dikembalikan dari iterasi daftar string Anda:

1. daftar indeks dalam daftar di mana string dapat dikonversi ke nilai bool?

2. atau, hanya sekumpulan nilai boolean dalam daftar: tanpa indeks, sulit membayangkan kegunaannya.

3. atau, untuk mengambil beberapa tindakan (menjalankan beberapa kode) untuk setiap string yang dapat dikonversi menjadi bool berdasarkan nilai boolean dan/atau indeks nilai tersebut dalam daftar string? imho, kasus penggunaan yang lebih masuk akal.

4. lihat komentar saya pada postingan Anda di atas untuk mengetahui hal lain yang perlu Anda klarifikasi

Saya akan menunjukkan kepada Anda contoh di sini untuk mengembalikan daftar string sebagai Kamus … di mana ‘kuncinya adalah indeks nilai boolean dalam daftar, dan nilainya adalah nilai boolean yang dikonversi.

C#
// required
using System.Linq

// assume the data source here is a simple List<string>
List<string> strList = new List<string>
{
    "True", "what", "False", "True", "ozone", "False"
};

// this variable must be initialized to be used in the Linq shown here
bool booltest = false;

Dictionary<int,bool> dctIntBool = strList
.Select((str, index) => new {index, str})
.Where(pair => Boolean.TryParse(pair.str, out booltest))
.ToDictionary(pair => pair.index, pair => booltest);

Perhatikan variasi Linq ‘Select yang membuat/mempertahankan indeks koleksi yang diulang digunakan di sini: setiap pasangan indeks/nilai diproyeksikan ke dalam struktur anonim baru; kemudian, pernyataan Where Linq memfilter “pasangan” tersebut sehingga setiap pasangan yang stringnya tidak dapat diubah menjadi ‘bool akan dibuang; terakhir, Linq ToDictionary digunakan untuk membuat struktur Kamus, menggunakan, untuk Nilai setiap KeyValuePair, nilai boolean yang ditetapkan ke ‘booltest oleh pernyataan ‘TryParse di klausa Where.

Solusi 2

Jika Anda ingin mengulangi suatu koleksi, dan tidak ingin menggunakan foreach loop, Anda tidak memiliki lebih banyak pilihan daripada a for lingkaran. Dengan cara ini (saya berasumsi mylist adalah IList):

C#
int count = mylist.Count;
string[] result; // This assumes you have an IList<string[]>
for (int i = 0; i < count; i++)
{
   result = mylist[i];
   bool value = Convert.ToBoolean(result[0]);
}

Saya tidak dapat melihat alasan mengapa Anda bekerja dengan daftar string-array untuk mendapatkan boolean. Jelas harus ada implementasi yang lebih baik/bersih.

Semoga ini membantu. Semoga beruntung.

Solusi 3

Jika yang kamu maksud List<T>Anda dapat menggunakan Daftar.Berisi metode[^].

C#
List<string> mylist = new List<string>(){"cat","dog","bird"};

var result = mylist.Contains("bird");
Console.WriteLine("A list {0} 'bird' word", result==true ? "contains" : "does not contain");

Solusi 5

Tidak ada yang namanya keajaiban. Jika Anda menggunakan metode tertentu tanpa perulangan, itu berarti ada perulangan yang digunakan di balik terpal. Namun seringkali masuk akal untuk menggunakan metode seperti itu. Lihat, khususnya, metode umum System.Array.ForEach<>:

[^].

-SA

Solusi 6

Anda dapat menggunakan fungsi lambda, seperti meningkatkan metode anonim, yang membuat kondisi lebih mudah dibaca:

bool exists = myList.Any(x => Convert.ToBoolean(x) == true);
if (exists) {
    // Do something
}

コメント

タイトルとURLをコピーしました