2010-08-19 15 views
21

Diyelim ki 500 elementli bir dizim var. İlk 100'ü .first(100) yaparak seçebileceğimi biliyorum, sorum 100'den 200'e kadar elementleri nasıl seçebilirim?Ruby'de belirli bir aralıktaki dizi öğeleri nasıl seçilir?

+0

olası bir kopyası [Bir dizinin Ruby'deki bir kısmının döndürülmesi] (http://stackoverflow.com/questions/695290/returning-a-part-of-an-array-in-ruby) –

cevap

42

Sen dizi alt simge olarak aralıkları kullanabilirsiniz:

arr[100..200] 
+3

Ayrıca negatif aralıklar da yapabilirsiniz: arr [100 ..- 50], bir 500 eleman dizisi durumunda, 450. elemanın içinden 100'üncü elemanı alacaktır. –

+0

İyi cevap, teşekkürler! :) – Vinozio

-3
new_array = old_array.first(200) - old_array.first(100) 
+0

anlam :). Merak ediyorum, bu – deb

+0

için bir yöntem var mı? Bu bir iki geçici dizi oluşturur ve sonra ayarlanmış bir fark yapar ... değil alan ve zaman verimli, sanırım. – DarkDust

+0

sağınız. Ben bir kazan kutuyum ve üzerinde ruby ​​yok, bu yüzden irb içinde başka çözümler deneyemedim. Ayrıca, array.find (100..200) hakkında da düşündüm ama aralıkları kabul edip etmediğini bilmiyorum. Denemek. – s84

2
sample_array = (1..500).to_a 
elements_100_to_200 = sample_array[100..200] 

Sen bir diziye endeksi olarak bir dizi geçebilir ve bu alt aralığın sorgulanır elemanları ile bir SubArray olsun.

13

Böyle yapabilirsiniz:

array[100..200] # returns the elements in range 100..200 
# or 
array[100,100] # returns 100 elements from position 100 

More Information

10

dvcolgan cevabı doğru, ama sizin gibi sesler olabilir dizininizi 100 kişilik gruplara ayırmaya çalışın. Eğer durum buysa, bunun için uygun bir yerleşik yöntem vardır:

nums = (1..500).to_a 

nums.each_slice(100) do |slice| 
    puts slice.size 
end 

# => 100, 100, 100, 100, 100 
İlgili konular