2013-07-22 10 views
13

私はアイテムの配列を持っているので、最初のx個のアイテムを削除する必要があります。これを行うには、Ruby Arrayクラスの組み込み関数がありますか?私は周りに検索して見つけただけで、それは非常に乱雑で非効率的なやり方でした。最初の配列の削除

私は、好ましくは、このようなもののように思います:

my_items = [ 'item1', 'item2', 'item3', 'item4' ] 
trimmed_items = my_items.delete(y, x) # deleting x entries from index y 

答えて

36

私が項目の配列を持っている、と私はそれの最初のx項目を削除する必要があります。

非破壊削除するには

Array#drop(x)あなたのための作業を行います。

aryから最初のn個の要素を削除し、残りの要素を配列に返します。負の数を指定すると、ArgumentErrorが発生します。

my_items = [ 'item1', 'item2', 'item3', 'item4' ] 
p my_items.drop(2) 
p my_items 

# >>["item3", "item4"] 
# >>["item1", "item2", "item3", "item4"] 

破壊欠失に

Array#shift

自己の最初のエレメントを削除して、(一つによって他のすべての要素をシフトダウン)を返します。配列が空の場合はnilを返します。nを指定すると、array.slice!(0、n)のように最初のn個の要素(またはそれ以下)の配列を返します。あなたができるmy_items破壊的に更新するように

my_items = [ 'item1', 'item2', 'item3', 'item4' ] 
my_items.shift(2) 
p my_items # => ["item3", "item4"] 
+1

完璧、ありがとう。私はSOが私にできるときこれを答えとしてマークします。 –

+1

すばらしい答えArup! – narzero

3

my_items.slice!(0, 2) 
# => ["item1", "item2"] 
my_items 
# => ["item3", "item4"] 
+0

ああ、そうスライス!普通の古いスライスはそのように動作します、ありがとう。 –

+0

あなたが作った素敵なアバター、私はそれが好きだった。 –

3

これを達成するためのさらに別の方法:あなたがから削除している値をしたい場合に特に有用である、Array#shiftを使用アレイの前面。

a = (1..5).to_a 
a.shift(2) 
a # => [3, 4, 5] 
関連する問題