配列の最初のn個の要素を取り出し(残りの部分を削除する)良い方法はありますか?取る方法! Rubyで?
組み込みメソッドが存在しない場合は、
def take! ary, n
...
end
z = (1..10).to_a
take! z, 5
# z is [1,2,3,4,5]
配列の最初のn個の要素を取り出し(残りの部分を削除する)良い方法はありますか?取る方法! Rubyで?
組み込みメソッドが存在しない場合は、
def take! ary, n
...
end
z = (1..10).to_a
take! z, 5
# z is [1,2,3,4,5]
試してみてください。
def taker(arr, n)
arr.pop(arr.length - n)
arr
end
p taker([1, 2, 3, 4, 5], 2) #=> [1, 2]
Array#replace
を使用しては、自分自身を示唆:
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
例はシングルトンメソッドを定義していますが、かもしれません配列の派生クラスに#take!
を定義し、モジュールなどのリファインメントを使用します。
私はいくつかの可能性がありますArray#slice!
x = [1, 2, 3, 4]
x.slice!(2..-1) # Will take! the first 2 elements of the array
x # => [1, 2]
これは再現できません。 'x#=> [3、4]'となっています。理由は分かりませんか? –
ハハ。そのとおりです。 @ sagarpandya82。私はこの同じ解決策を思いついたが、うまくいかなかった。それは '[1,2]'を返すので動作するようです。 –
オイ、そうです。 Mea culpa。私はそれを修正します。 –
を使用すると思います。 常に作品は単に引数の内容と受信機の内容を置き換えるので、あなただけの何かを言うことができますので、任意の他の配列に任意の配列を変換するために使用することができますArray#replace
であることを
スイスアーミーナイフ以下のような:Array#slice!
を使用して
class Array
def take!(n)
replace(take(n))
end
end
は別の可能性である:
class Array
def take!(n)
slice!(0, n)
end
end
アイデアは、配列を変更することです。 「テイク」は受取人と同じです。 –
@BSeven。私の答えを変えました。 –
はい、それは動作します。私はあなたの答えをupvoted。 'z =(1..5).to_a; taker z、2; z' –