私は配列を持っています。インデックス 0 の要素を除くすべてを保持する必要があります。この時点で私の脳は焼き尽くされます。私は一日中プログラミングをしています。どんな助けでも素晴らしいでしょう。ありがとうございました!
4 に答える
メソッドを使用してくださいArray#shift
。それはあなたが望むことを正確に行います:
a = [1, 2, 3]
a.shift # => 1
a # => [2, 3]
配列インデックスのスライスを使用できます。
some_array[1..-1]
または、変数を永続的に変更したい場合は、どうすればよいですか:
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
そして私はこれをしたかった:
puts a.method1.method2.removeFirstElement.method3.method4
を使用してこれを行う1つの方法slice
は別の回答で示されましたが、場合によっては受け入れられた回答よりもどのように優れているかは明確にはされていませんでした:
puts a.method1.method2.slice(1..-1).method3.method4
受け入れられた回答を使用した場合、次のようにする必要があります。
temp = a.method1.method2
temp.shift
puts temp.method3.method4
元のコード構造を修正する必要があることに加えて (実行内容によっては長所と短所があります)、結果を得るために新しい一時オブジェクト ('temp') を作成する必要があります。
私たちがどこに向かっているのかが、そこにたどり着く方法に明確な影響を与えることがよくあることを知っておくとよいでしょう.
(感嘆符は配列が変更されていることを明確にするため、実際に配列を変更するslice!(0)
代わりに in を使用することをほとんど好むことに注意してください。この方法は、感嘆符を追加するという現在の提案に準拠していませんオブジェクトを変更するメソッドに.しかし、残念ながら、.shift
shift
shift
(0)