Maaf untuk jenis pertanyaan ini, saya pemula di sini, dan saya sedang belajar menggunakan alat ini, saya akan mencoba menemukan jawabannya sebelum memposting di sini.
Lucas Renan
107
Kepada setiap orang yang mengeluh tentang pertanyaan semacam ini: harap baca FAQ: 'Tidak ada pertanyaan yang terlalu sepele atau terlalu "pemula"'. Jika Anda tidak menyukai pertanyaan itu, jangan menjawabnya, dan biarkan orang lain melakukannya. Jika pertanyaan sudah ditanyakan dan dijawab di SO, maka pastikan, tandai sebagai duplikat. Tetapi tidak ada alasan untuk mencaci para pendatang baru karena menjadi orang baru.
Brian Campbell
Jawaban:
117
Saya menebak bahwa Anda mencoba menemukan apakah nilai tertentu ada di dalam array, dan jika demikian, Anda dapat menggunakan Array # include? (Value):
a =[1,2,3,4,5]
a.include?(3)# => true
a.include?(9)# => false
Saya akan menggunakan Array # index, tetapi memeriksa Ruby Array API adalah tip yang bagus.
Wylliam Judd
82
Menggunakan Array#selectakan memberi Anda larik elemen yang memenuhi kriteria. Tetapi jika Anda mencari cara untuk mengeluarkan elemen dari larik yang memenuhi kriteria Anda, Enumerable#detectakan menjadi cara yang lebih baik untuk melakukannya:
array =[1,2,3]
found = array.select {|e| e ==3}#=> [3]
found = array.detect {|e| e ==3}#=> 3
Jika tidak, Anda harus melakukan sesuatu yang canggung seperti:
Terima kasih! Saya tahu tentang Enumerable#selecttetapi #detectitulah yang saya cari.
Justin Adkins
1
array.select{}akan melalui semua elemen dalam array mencari yang cocok dengan kondisi. array.findsebagai gantinya akan mengembalikan elemen pertama yang cocok dengan kondisi. Jadi lebih disukai digunakan array.find{ |e| e == 3 }kemudianarray.select{ |e| e == 3 }.first
Oscar Gonzalez
Saya pikir maksud Anda, .find_index saya tidak tahu apakah ada.find
Ross Attrill
27
Jika Anda ingin menemukan satu nilai dari array, gunakan Array#find:
Untuk mengetahui apakah ada nilai dalam Array, Anda juga dapat menggunakan #in?saat menggunakan ActiveSupport. #in?berfungsi untuk objek apa pun yang merespons #include?:
Jawaban ini untuk semua orang yang menyadari bahwa jawaban yang diterima tidak menjawab pertanyaan seperti yang tertulis saat ini.
Pertanyaannya menanyakan bagaimana menemukan nilai dalam sebuah array. Jawaban yang diterima menunjukkan bagaimana memeriksa apakah suatu nilai ada dalam array.
Sudah ada contoh penggunaan index, jadi saya berikan contoh cara selectpakai.
1.9.3-p327 :012> x =[1,2,3,4,5]=>[1,2,3,4,5]1.9.3-p327 :013> x.select {|y| y ==1}=>[1]
@MarkThomas tolong kutip bagian dari jawaban saya yang Anda klaim sebagai pernyataan yang salah dan saya akan dengan senang hati memperbaruinya. Saya berasumsi bahwa kami menggunakan bahasa Inggris di sini (bukan definisi yang dibuat-buat untuk kata-kata). Dan ketika ribuan orang mencari "ruby FIND value in array" di Google, mereka melihat pertanyaan ini sebagai hasil pertama, jadi saya yakin mereka semua akan senang jika benar-benar mendapatkan jawaban yang benar.
Mike S
1
Selain itu, @MarkThomas jika Anda benar maka pertanyaan ini harus ditutup karena merupakan duplikat dari stackoverflow.com/questions/1986386/… , tetapi ada perbedaan fungsional antara "menemukan" dan "memeriksa keberadaan" dalam larik.
Mike S
Saya alergi terhadap orang yang membangkitkan pertanyaan lama dan memberikan sedikit atau tidak ada substansi lagi. Ini sering terjadi. Dalam kasus Anda, meskipun selecttelah diberikan sebagai jawaban pada tahun 2009, Anda memberikan cuplikan sampel yang sedikit lebih baik. Jadi setelah memikirkannya kembali, saya menarik kembali apa yang saya katakan sebelumnya.
Mark Thomas
8
Saya tahu pertanyaan ini telah dijawab, tetapi saya datang ke sini mencari cara untuk memfilter elemen dalam Array berdasarkan beberapa kriteria. Jadi, inilah contoh solusi saya: menggunakan select, saya menemukan semua konstanta di Kelas yang dimulai dengan "RUBY_"
Class.constants.select {|c| c.to_s =~/^RUBY_/}
PEMBARUAN: Sementara itu, saya telah menemukan bahwa Array # grep bekerja jauh lebih baik. Untuk contoh di atas,
Sementara itu, saya telah menemukan bahwa Array # grep bekerja jauh lebih baik. Bahkan untuk contoh di atas, Class.constants.grep /^RUBY_/lakukan triknya.
Jawaban:
Saya menebak bahwa Anda mencoba menemukan apakah nilai tertentu ada di dalam array, dan jika demikian, Anda dapat menggunakan Array # include? (Value):
Jika Anda bermaksud lain, periksa Ruby Array API
sumber
Menggunakan
Array#select
akan memberi Anda larik elemen yang memenuhi kriteria. Tetapi jika Anda mencari cara untuk mengeluarkan elemen dari larik yang memenuhi kriteria Anda,Enumerable#detect
akan menjadi cara yang lebih baik untuk melakukannya:Jika tidak, Anda harus melakukan sesuatu yang canggung seperti:
sumber
Enumerable#select
tetapi#detect
itulah yang saya cari.array.select{}
akan melalui semua elemen dalam array mencari yang cocok dengan kondisi.array.find
sebagai gantinya akan mengembalikan elemen pertama yang cocok dengan kondisi. Jadi lebih disukai digunakanarray.find{ |e| e == 3 }
kemudianarray.select{ |e| e == 3 }.first
.find_index
saya tidak tahu apakah ada.find
Jika Anda ingin menemukan satu nilai dari array, gunakan
Array#find
:Lihat juga:
Untuk mengetahui apakah ada nilai dalam Array, Anda juga dapat menggunakan
#in?
saat menggunakan ActiveSupport.#in?
berfungsi untuk objek apa pun yang merespons#include?
:sumber
Array#find
di referensi Ruby. Pasti benda Rails karena orang lain telah menyebutkannya. Hmmm ....Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-findSeperti ini?
atau seperti ini?
Lihat manual .
sumber
Anda dapat menggunakan Array.select atau Array.index untuk melakukannya.
sumber
Menggunakan:
myarray.index "valuetoFind"
Itu akan mengembalikan Anda indeks elemen yang Anda inginkan atau nihil jika array Anda tidak berisi nilai.
sumber
Jawaban ini untuk semua orang yang menyadari bahwa jawaban yang diterima tidak menjawab pertanyaan seperti yang tertulis saat ini.
Pertanyaannya menanyakan bagaimana menemukan nilai dalam sebuah array. Jawaban yang diterima menunjukkan bagaimana memeriksa apakah suatu nilai ada dalam array.
Sudah ada contoh penggunaan
index
, jadi saya berikan contoh caraselect
pakai.sumber
select
telah diberikan sebagai jawaban pada tahun 2009, Anda memberikan cuplikan sampel yang sedikit lebih baik. Jadi setelah memikirkannya kembali, saya menarik kembali apa yang saya katakan sebelumnya.Saya tahu pertanyaan ini telah dijawab, tetapi saya datang ke sini mencari cara untuk memfilter elemen dalam Array berdasarkan beberapa kriteria. Jadi, inilah contoh solusi saya: menggunakan
select
, saya menemukan semua konstanta di Kelas yang dimulai dengan "RUBY_"PEMBARUAN: Sementara itu, saya telah menemukan bahwa Array # grep bekerja jauh lebih baik. Untuk contoh di atas,
berhasil.
sumber
Class.constants.grep /^RUBY_/
lakukan triknya.Terima kasih atas balasannya.
Saya suka ini:
sumber
Anda dapat menggunakan metode array.
Untuk melihat semua metode array gunakan
methods
fungsi dengan array. Sebagai contoh,Dengan cara Anda dapat menggunakan metode yang berbeda untuk memeriksa nilai dalam array yang dapat Anda gunakan
a.include?("name")
.sumber