2012-08-02 17 views
5

私は配列を持っています。私はインデックス0の要素を除くすべてを保持する必要があります。私の脳はこの時点で揚げられています。私は終日プログラミングしています。どんな助けも素晴らしいだろう。ありがとうございました!あなたは永久に変数を変更したい場合は、howsaboutをRuby配列の最初のインデックスを削除します。

some_array[1..-1] 

または、::

+2

http://whathaveyoutried.com? –

答えて

14

Array#shiftメソッドを使用し、それは正確に何をしたいん:

a = [1, 2, 3] 
a.shift # => 1 
a # => [2, 3] 
+0

私はこれをもう一度試みたと宣誓できました。それはとても簡単でした。私はちょうどタイプミスまたは何かを持っているに違いない。ありがとうございました –

+4

'shift'または' unshift'が配列から項目を削除するかどうかを覚えておくのに便利な(弱い)ニーモニックについては、名前から "f"を削除してみてください。 :) – Phrogz

+0

@Phrogz:笑、それを愛する。 – maerics

7

あなただけの配列のインデックスのスライスを使用することができ

some_array = [1,2,3,4] 
some_array.delete_at(0) 
# => 1 
some_array 
# => [2,3,4] 
1

よい結果を得るための異なる方法があるどの結果で何をする(除去最初の要素を持つ配列)に応じて、どのようにそれが使用されます選択に影響を与えます。

一方向では、元の配列を新しい配列に変更し、最初の要素はメソッドを適用して削除し、そのメソッドの結果は無視し、適用されたメソッドの副作用のために望ましい結果を達成します。 OPは、(それが彼の場合で働いていたことを意味する)これをしなかった答え受け入れ:

a = [ "a", "b", "c" ] 
a.shift #=> "a" 
a #=> ["b", "c"] 

あなたは結果の配列が保存されたい場合はうまく動作しますが、それはあなたの必要性は、チェーンの途中にいくつかの方法をドロップすることです既存のメソッドの「最初の配列要素を取り除く」ために使用します。しかし、私の場合、最初の要素はシステムコマンドによって生成された見出し行であり、そのコマンドからの出力のいくつかの行、各配列要素に1つあり、私が望む結果を得るために行を修正していた配列ヘッダ行を削除する必要があることを認識しました。これは、残りの行とは異なる形式であるため、正しく処理されず、必要でもなかったからです。コードの私の元の行は、この(再び、aが配列である場合)のようなものに見えた:

puts a.method1.method2.method3.method4 

を、私はこれをやってみたかった:sliceを使用してこれを行うには

puts a.method1.method2.removeFirstElement.method3.method4 

一つの方法が示されました。

puts a.method1.method2.slice(1..-1).method3.method4 

私は受け入れ答えを使用した場合、私は希望ヘクタール:それはそれは受け入れ答えよりもいくつかのケースでは良いかもしれませんどのように明らかにされていなかったのに別の答えで、それは新しい一時オブジェクトを作成する必要があります( '一時(つまり行われているものに依存して長所と短所がありますが)元のコードの構造を修正する必要性のほかに

temp = a.method1.method2 
temp.shift 
puts temp.method3.method4 

:このような何かをしまし')結果に到達するだけです。

私たちが頻繁に向かうところに行く方法には明確な効果があることを知っておきましょう。

(私は感嘆符は、配列が変更されていることが明確にあることになるので、私はほとんど実際には配列を変更することがshiftの代わりにslice!(0)の使用を好むことに注意しましょう。shift方法はに準拠していません。オブジェクトを変更するメソッドに感嘆符を追加することを提案しています。しかし、ああ、とにかくshiftを使用すると、(0)の乱雑さを避けることができます)。

関連する問題