Memeriksa apakah array string berisi nilai, dan jika demikian, dapatkan posisinya

162

Saya punya array string ini:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

Saya ingin menentukan apakah stringArrayberisi value. Jika demikian, saya ingin mencari posisinya di array.

Saya tidak ingin menggunakan loop. Adakah yang bisa menyarankan bagaimana saya bisa melakukan ini?

Juga
sumber

Jawaban:

316

Anda bisa menggunakan metode Array.IndexOf :

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
int pos = Array.IndexOf(stringArray, value);
if (pos > -1)
{
    // the array contains the string and the pos variable
    // will have its position in the array
}
Darin Dimitrov
sumber
1
... Dan saya telah menggunakan foreach selama berbulan-bulan. BTW apakah komputasi ini lebih cepat dari jawaban BLUEPIXY? Atau lebih lambat?
Max von Hippel
2
Apakah Array.IndexOfpeduli dengan kapitalisasi? Apakah itu "text1" == "TEXT1"?
EVIL
Array.IndexOfmengembalikan −1hanya jika indeks dibatasi 0. Kasus ini akan pecah, jadi waspadalah! var a = Array.CreateInstance(typeof(int),new int[] { 2 }, new int[] { 1 }); a.SetValue(1, 1); Console.WriteLine(Array.IndexOf(a, 26)); // 0
benscabbia
Ini berguna jika Anda mencari pasangan yang tepat. Namun, ini mungkin berguna jika Anda tidak peduli tentang kasus: Bagaimana cara menambahkan opsi case-insensitive ke Array.IndexOf
Kyle Champion
72
var index = Array.FindIndex(stringArray, x => x == value)
BLUEPIXY
sumber
7
Ini harus menjadi jawaban yang diterima karena memungkinkan seseorang untuk melewati lambda untuk melakukan hal-hal yang lebih rumit seperti Array.FindIndex (array, x => x.StartsWith ("masukkan string di sini"))
reggaeguitar
1
Tapi bukan itu pertanyaannya. Pertanyaannya menanyakan bagaimana Anda menemukan nilai yang diketahui dari array.
Karl Gjertsen
2
@KarlGjertsen Saya ingin mencari posisinya di array
BLUEPIXY
Ini sangat berguna, bisa melakukan sesuatu seperti x.ToUpper () cukup bermanfaat bagi saya.
mrshickadance
31

Kita juga bisa menggunakan Exists:

string[] array = { "cat", "dog", "perl" };

// Use Array.Exists in different ways.
bool a = Array.Exists(array, element => element == "perl");
bool c = Array.Exists(array, element => element.StartsWith("d"));
bool d = Array.Exists(array, element => element.StartsWith("x"));
Taran
sumber
1
Jawaban bersih dan sederhana
Aryan Firouzian
Bagaimana cara memeriksa nilai individual? Ketika saya mencoba memeriksa char array untuk char, saya mendapat pesan yang chartidak dapat dikonversi keSystem.Predicate<char>
Aaron Franke
13

EDIT: Saya tidak memperhatikan Anda membutuhkan posisi itu juga. Anda tidak dapat menggunakan IndexOfsecara langsung pada nilai jenis array, karena itu diterapkan secara eksplisit. Namun, Anda dapat menggunakan:

IList<string> arrayAsList = (IList<string>) stringArray;
int index = arrayAsList.IndexOf(value);
if (index != -1)
{
    ...
}

(Hal ini mirip dengan memanggil Array.IndexOfsesuai jawaban Darin ini -. Hanya sebuah pendekatan alternatif Tidak jelas bagi saya mengapa ini dilaksanakan secara eksplisit dalam array, tetapi tidak pernah keberatan ...)IList<T>.IndexOf

Jon Skeet
sumber
bagaimana cara menemukan kepemilikan dunia dalam array menggunakan Contains?
MoShe
Apakah ada kemungkinan untuk memeriksa item string dalam array string A yang ada di array string B lainnya?
Murali Murugesan
@MuraliMurugesan: Tidak jelas apa yang Anda minta - apakah dua array memiliki setiap item kesamaan? Satu item spesifik ? (Dalam kasus terakhir, fakta bahwa array juga tidak relevan.)
Jon Skeet
Saya mencoba menjawab di sini stackoverflow.com/a/22812525/1559213 . Saya memukul untuk mengembalikan true / false untuk baris Html.CheckBox. Sebenarnya ada array berbulan-bulan dan juga model yang memiliki beberapa bulan. Jika Model bulan hadir dalam array bulan, kita perlu mengembalikan true. Terima kasih atas respons roket :)
Murali Murugesan
@MuraliMurugesan: Ya kedengarannya sepertiif (months.Contains(model.Month))
Jon Skeet
5

Anda dapat menggunakan Array.IndexOf()- perhatikan bahwa ia akan mengembalikan -1 jika elemen belum ditemukan dan Anda harus menangani kasus ini.

int index = Array.IndexOf(stringArray, value);
Gelas pecah
sumber
4

Anda dapat mencoba seperti ini ... Anda dapat menggunakan Array.IndexOf (), jika Anda ingin mengetahui posisinya juga

       string [] arr = {"One","Two","Three"};
       var target = "One";
       var results = Array.FindAll(arr, s => s.Equals(target));
Keadaan Enigma
sumber
3

IMO cara terbaik untuk memeriksa apakah array berisi nilai yang diberikan adalah dengan menggunakan System.Collections.Generic.IList<T>.Contains(T item)metode dengan cara berikut:

((IList<string>)stringArray).Contains(value)

Contoh kode lengkap:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if (((IList<string>)stringArray).Contains(value)) Console.WriteLine("The array contains "+value);
else Console.WriteLine("The given string was not found in array.");

T[]array secara pribadi menerapkan beberapa metode List<T>, seperti Hitung dan Berisi. Karena ini merupakan implementasi (pribadi) yang eksplisit, Anda tidak akan dapat menggunakan metode ini tanpa terlebih dahulu menggunakan array. Ini tidak hanya berfungsi untuk string - Anda bisa menggunakan trik ini untuk memeriksa apakah array jenis apa pun mengandung elemen apa pun, selama kelas elemen mengimplementasikan IComparable.

Perlu diingat tidak semua IList<T>metode bekerja dengan cara ini. Mencoba menggunakan IList<T>metode Tambah pada larik akan gagal.

pami
sumber
2
Jawaban Anda pada dasarnya sama dengan jawaban Priyank. Itu tidak memberikan indeks elemen yang diminta OP.
reggaeguitar
@reggaeguitar Setuju dengan Anda di sana!
Si8
Ini solusi yang saya cari, meskipun tidak sepenuhnya menjawab pertanyaan.
Auspex
1

Anda dapat mencoba ini, mencari indeks yang mengandung elemen ini, dan menetapkan nomor indeks sebagai int, kemudian memeriksa apakah int lebih besar dari -1, jadi jika itu 0 atau lebih, maka itu berarti ditemukan seperti indeks - karena array adalah berbasis 0.

string[] Selection = {"First", "Second", "Third", "Fourth"};
string Valid = "Third";    // You can change this to a Console.ReadLine() to 
    //use user input 
int temp = Array.IndexOf(Selection, Valid); // it gets the index of 'Valid', 
                // in our case it's "Third"
            if (temp > -1)
                Console.WriteLine("Valid selection");
            }
            else
            {
                Console.WriteLine("Not a valid selection");
            }
Mayer Spitzer
sumber
0
string x ="Hi ,World";
string y = x;
char[] whitespace = new char[]{ ' ',\t'};          
string[] fooArray = y.Split(whitespace);  // now you have an array of 3 strings
y = String.Join(" ", fooArray);
string[] target = { "Hi", "World", "VW_Slep" };

for (int i = 0; i < target.Length; i++)
{
    string v = target[i];
    string results = Array.Find(fooArray, element => element.StartsWith(v, StringComparison.Ordinal));
    //
    if (results != null)
    { MessageBox.Show(results); }

}
pengguna5248404
sumber
0

Saya membuat metode ekstensi untuk digunakan kembali.

   public static bool InArray(this string str, string[] values)
    {
        if (Array.IndexOf(values, str) > -1)
            return true;

        return false;
    }

Bagaimana cara menyebutnya:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if(value.InArray(stringArray))
{
  //do something
}
james31rock
sumber
Di mana positionOP meminta?
Si8
-3
string[] strArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

if(Array.contains(strArray , value))
{
    // Do something if the value is available in Array.
}
Jaydeep Bhatt
sumber
Ini memberikan kesalahan: 'System.Array' tidak mengandung definisi untuk 'berisi'.
ePandit
-4

Metode paling sederhana dan lebih pendek adalah sebagai berikut.

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

if(stringArray.Contains(value))
{
    // Do something if the value is available in Array.
}
Priyank Gajera
sumber
3
Pertanyaannya adalah tentang menemukan posisi suatu item dalam sebuah array .... Dengan Containsmetode ini Anda tidak memiliki informasi ini
Bidou