Bir dizideki ilk n öğelerini almak ve saklamak için iyi bir yol nedir?Nasıl alınır? Ruby'de mi?
sonra, yerleşik bir yöntem varsa
def take! ary, n
...
end
z = (1..10).to_a
take! z, 5
# z is [1,2,3,4,5]
Bir dizideki ilk n öğelerini almak ve saklamak için iyi bir yol nedir?Nasıl alınır? Ruby'de mi?
sonra, yerleşik bir yöntem varsa
def take! ary, n
...
end
z = (1..10).to_a
take! z, 5
# z is [1,2,3,4,5]
Dene:
def taker(arr, n)
arr.pop(arr.length - n)
arr
end
p taker([1, 2, 3, 4, 5], 2) #=> [1, 2]
Array#replace
kullanma kendisini göstermektedir:
z = (1..10).to_a
z.object_id # 23576880
def z.take! n
replace(take n)
end
z.take! 5 # [1, 2, 3, 4, 5]
z.object_id # 23576880
Örnek tekil yöntemi tanımlar, ancak may Dizi türetilmiş sınıfınızda #take!
tanımını yapın, modül vb. iyileştirmeyi kullanın.
Sadece Array#slice!
x = [1, 2, 3, 4]
x.slice!(2..-1) # Will take! the first 2 elements of the array
x # => [1, 2]
Bunu yeniden oluşturamıyorum. X # => [3, 4] 'i alıyorum. Emin değilim neden? –
Haha. Bu doğru. @ Sagarpandya82. Aynı çözümden geldim ve işe yaramadı. Çalışıyor gibi görünüyor çünkü [1,2] 'yi döndürüyor. –
Oy, evet. Mea Culpa. Ben düzelteceğim. –
birkaç olasılık vardır kullanmayı tercih ediyorum. hep eserler sadece başka diziye herhangi diziyi dönüştürmek için kullanılabilir böylece argüman içeriğiyle alıcı içeriğini değiştirir ve Array#replace
, yani Bir şey söyleyebilir ki
İsviçre Çakısı gibi:
class Array
def take!(n)
slice!(0, n)
end
end
fikri diziyi değiştirmektir:
Array#slice!
kullanmabaşka bir olasılıktır. 'Take' will alıcı ile aynı olacaktır. –
@BSeven. Tamam, cevabımı değiştirdim, daha iyi olup olmadığından emin değilim. –
Evet, işe yarıyor. Cevabını bastım. 'z = (1..5) .to_a; alıcı z, 2; z' –