Apakah Indeks Array Ada


91

Saya mewarisi beberapa kode di tempat kerja yang baunya sangat buruk. Saya berharap menemukan solusi yang paling mudah.

Apakah ada cara untuk memeriksa apakah beberapa bilangan arbitrer adalah elemen yang valid dalam sebuah array?

Contoh - Saya perlu memeriksa apakah array [25] ada.

Lebih disukai saya lebih suka melakukan ini tanpa melakukan foreach () melalui array untuk menemukan baris.

Apakah ada cara untuk melakukan ini, atau apakah saya terjebak dengan foreach loop?


Apakah maksud Anda Anda ingin mengetahui apakah ada nilai untuk array [x] == 25? Saya pikir Anda membingungkan orang-orang tentang apa yang Anda minta dengan menanyakan apakah array [25] ada. Tentu itu ada jika ada 26 atau lebih elemen dalam array, tapi saya rasa itu bukan yang Anda minta.
kevin42

Program tempat saya bekerja memiliki dua kemungkinan array yang memiliki nama file yang sama. Satu memiliki 21 elemen dan Yang Lain memiliki 30 sesuatu. Saya membutuhkan nilai pada array [25] jika ada.
splatto

Jawaban:


145

Uji panjangnya

int index = 25;
if(index < array.Length)
{
    //it exists
}

3
Terima kasih. Saya tidak percaya saya tidak memikirkan properti .Length!
splatto

13
Pastikan indeks> = 0 juga.
Andreas Grech

2
Dan pastikan array itu sendiri tidak null :)
Shimmy Weitzhandler

1
Karena indeks Array diharuskan berurutan di C # ini benar. Ada jenis koleksi yang tidak memiliki indeks sekuensial, tetapi itu bukan jenis Array dasar di C #.
reor

106

Anda juga dapat menggunakan LINQ untuk mencapainya:

var exists = array.ElementAtOrDefault(index) != null;

4
Terima kasih, inilah yang saya cari, bukan pemeriksaan panjang array yang canggung.
Starceaker

7
Catatan kecil, new object[]{ null }.ElementAtOrDefault(index)akan kembali nullkarena elemen pada 0 adalah null . Menggunakan ElementAtOrDefaultbukanlah solusi yang bagus untuk memeriksa indeks array yang ada , bahwa pemeriksaan kesetaraan yang ditambahkan di bagian akhir membuat hasil tidak dapat ditentukan.
Chris Marisic

@ChrisMarisic Bisakah Anda memberi contoh?
FMFF

2
@ChrisMarisic Anda benar, jika Anda ingin memeriksa keberadaan saja lakukan array.Length > index.
Shimmy Weitzhandler

2
@ChrisMarisic, sebenarnya ini adalah catatan utama, solusi seperti ini akan menyebabkan bug tersembunyi
amd

21

Apa sebenarnya yang Anda maksud dengan "adalah elemen yang valid"? Anda bisa melakukan:

if (array.Length >= 26)

yang akan memberi tahu Anda apakah 25 adalah indeks yang valid ke dalam array atau tidak (dengan asumsi batas bawah 0).

Jika Anda perlu tahu apakah itu bukan null atau tidak, gunakan saja:

if (array[25] != null)

(atau kombinasi keduanya).

Jika ini tidak membantu, berikan pengertian yang lebih tepat tentang "valid" untuk masalah Anda.


3
untuk contoh kedua saya punya ini. Index was outside the bounds of the array
Muhammad Raheel

4
@raheel: Kalau begitu sepertinya Anda seharusnya menggunakan tes pertama sebagai gantinya ...
Jon Skeet

12

Dengan asumsi Anda juga ingin memeriksa apakah item tersebut bukan null

if (array.Length > 25 && array[25] != null)
{
    //it exists
}

1
Catatan: Harus digunakan &&dalam if (array.Length > 25 && array[25] != null), jika menggunakan tunggal &akan memunculkan pengecualian IndexOutOfRange. MSDN .
checksum

3
// I'd modify this slightly to be more resilient to a bad parameter
// it will handle your case and better handle other cases given to it:

int index = 25;

if (index >= 0 && index < array.Length)
{
    // Array element found
}

1

Anda dapat menggunakan panjang larik, dan melihat apakah angka arbitrer Anda cocok dengan rentang itu. Misalnya, jika Anda memiliki larik berukuran 10, larik [25] tidak valid karena 25 tidak kurang dari 10.


1

Anda lebih baik menggunakan Daftar, sehingga Anda dapat memeriksa keberadaannya.

List<int> l = new List<int>();
l.Add(45);
...
...

if (l.Count == 25) {
  doStuff();
}
int num = 45;
if (l.Contains(num)) {
  doMoreStuff();
}

1

array.length akan memberi tahu Anda berapa banyak elemen dalam sebuah array


0

Anda dapat memeriksa apakah indeks lebih kecil dari panjang array. Ini tidak memeriksa null atau kasus ganjil lainnya di mana indeks dapat diberi nilai tetapi belum diberikan secara eksplisit.


0

Anda dapat memeriksa panjang array untuk melihat apakah item 25 valid dalam artian berada di dalam array, maka Anda dapat menggunakan

if (array.Length > 25)
{ 
   if (array[25] != null)
   {
       //good
   }
}

untuk melihat apakah item array itu sendiri telah disetel.


0

Kedengarannya seperti Anda menggunakan array untuk menyimpan bidang yang berbeda. Ini pasti bau kode. Saya akan menghindari penggunaan array sebanyak mungkin karena mereka umumnya tidak cocok (atau dibutuhkan) dalam kode tingkat tinggi.

Beralih ke Kamus sederhana mungkin merupakan opsi yang bisa diterapkan dalam jangka pendek. Seperti halnya menggunakan tas sekelas property besar. Ada banyak pilihan. Masalah yang Anda hadapi sekarang hanyalah gejala dari desain yang buruk, Anda harus melihat memperbaiki masalah yang mendasarinya daripada hanya menambal desain yang buruk sehingga agak, sebagian besar berfungsi, untuk saat ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.