序章
array は、elementsと呼ばれる値のリストを表すデータ構造です。 配列を使用すると、1つの変数に複数の値を格納できます。 これにより、コードが凝縮されて整理され、読みやすく、保守しやすくなります。 また、配列は独自のメソッドを持つオブジェクトであるため、データのリストの操作をはるかに簡単にすることができます。
Rubyで。 配列には、数値、文字列、その他のRubyオブジェクトを含む任意のデータ型を含めることができます。
配列がいかに強力であるかの簡単な例を見てみましょう。 電子メールアドレスのリストを維持する必要があると想像してください。 配列がない場合は、次のように電子メールアドレスを変数に格納できます。
emails.rb
email1 = "[email protected]" email2 = "[email protected]" email3 = "[email protected]" email4 = "[email protected]"
このアプローチは冗長であり、柔軟性が低いため、すぐに保守が困難になる可能性があります。 別のメールアドレスを追加すると、追加の変数を追加して追跡する必要があります。
配列を使用する場合は、このデータを単純化できます。
emails.js
emails = [ "[email protected]", "[email protected]", "[email protected]", "[email protected]" ]
5つの個別の変数を作成する代わりに、4つの電子メールアドレスすべてを含む1つの変数ができました。 この例では、角かっこ[]
を使用して配列を作成し、各エントリをコンマで区切りました。 追加の電子メールアドレスを追加する必要がある場合は、新しい変数を作成して管理するのではなく、配列に別の電子メールアドレスを追加します。
特定のアイテム、または配列の要素にアクセスするには、そのインデックス、または配列内のその位置を参照します。 Rubyでは、インデックスはゼロから始まります。 したがって、emails
配列から最初の要素を取得するには、次のように角かっこを使用して要素のインデックスを変数に追加します。
print emails[0];
[email protected]
このチュートリアルでは、配列を作成し、配列に含まれる値にアクセスし、配列内の要素を追加、変更、および削除し、配列内の要素を反復処理して、より複雑な問題を解決します。 まず、配列を作成する方法を詳しく見ていきましょう。
配列の作成
Rubyプログラムで配列を作成するには、角かっこ([]
)を使用し、格納する値をコンマで区切ります。
たとえば、サメの配列を作成し、次のように変数に割り当てます。
sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]
print
ステートメントを使用して配列全体を印刷できます。これにより、配列の内容が表示されます。
print sharks
Output["Hammerhead", "Great White", "Tiger"]
各エントリが1つの単語である配列を作成する場合は、%w{}
構文を使用して、単語配列を作成できます。
days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday}
これは、中括弧を使用して配列を作成するのと同じです。
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
ただし、%w{}
メソッドでは、引用符とコンマをスキップできることに注意してください。
配列は、類似したデータ型のリストをグループ化するためによく使用されますが、Rubyでは、配列には、他の配列を含め、任意の値または値の組み合わせを含めることができます。 次に、文字列、nil
値、整数、および文字列の配列を含む配列の例を示します。
mixed_data.rb
record = [ "Sammy", null, 7, [ "another", "array", ] ]
次に、配列に格納されているデータにアクセスする方法を見てみましょう。
配列内のアイテムへのアクセス
角かっこで囲まれたアイテムのindexを参照して、Ruby配列のアイテムにアクセスします。
変数sharks
に割り当てられたサメの配列を使用して、この概念を調べてみましょう。
sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]
sharks
配列には3つの要素があります。 sharks
配列の各要素のインデックス作成方法の内訳は次のとおりです。
ハンマーヘッド | グレートホワイト | 虎 |
---|---|---|
0 | 1 | 2 |
配列の最初の要素はHammerhead
で、0
でインデックスが付けられます。 最後の要素はTiger
で、2
でインデックスが付けられます。 カウントはインデックスの0
で始まります。これは、1からカウントを開始するという私たちの自然な直感に反するため、自然になるまでこれを覚えておく必要があります。
注:インデックスをオフセットと考えると役立つ場合があります。 配列の先頭からの場所の数です。 最初の要素は先頭にあるため、そのオフセットまたはインデックスは0
です。 2番目の要素は、配列の最初のエントリから1スポット離れているため、そのオフセットまたはインデックスは1
です。
length
メソッドを使用すると、配列に含まれる要素の数を確認できます。
sharks.length
Output3
sharks
のインデックスは0
で始まり、2
に移動しますが、length
プロパティは、配列内の要素の数である3
。 インデックスには全く関係ありません。
seahorse
など、配列内の特定の要素のインデックス番号を確認する場合は、index()
メソッドを使用します。
print sharks.index("Tiger")
Output2
これは、そのテキストを含む最初の要素のインデックスを返します。 存在しない値など、インデックス番号が見つからない場合、コンソールはnil
を返します。
print sharks.index("Whale")
Outputnil
Rubyで配列の最後の要素を取得するには、インデックス-1
を使用します。
print sharks[-1]
Output"Tiger"
Rubyには、インデックスを使用せずに最初と最後の要素を取得するためのfirst
およびlast
メソッドも用意されています。
puts sharks.first puts sharks.last
Output"Hammerhead" "Tiger"
存在しないインデックスにアクセスしようとすると、nil
が返されます。
sharks[10]
Outputnil
配列には、ネストされた配列と呼ばれる他の配列を含めることができます。 これは、プログラムで2次元データセットをモデル化する1つの方法です。 ネストされた配列の例を次に示します。
nested_array = [ [ "salmon", "halibut", ], [ "coral", "reef", ] ]
ネストされた配列の要素にアクセスするには、内部配列に対応する別のインデックス番号を追加します。 たとえば、このネストされた配列から値coral
を取得するには、次のステートメントを使用します。
print nested_array[1][0];
Outputcoral
この例では、nested_array
変数の位置1
にある配列にアクセスし、配列["coral", "reef"]
を返しました。 次に、その配列の0
の位置にある要素、つまり"coral"
にアクセスしました。
次に、配列に要素を追加する方法を見てみましょう。
要素の追加
sharks
配列には、0
から2
のインデックスが付けられた3つの要素があります。
sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]
新しい要素を追加する方法はいくつかあります。 次のインデックスに値を割り当てることができます。この場合は3
になります。
sharks[3] = "whale"; print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale"]
ただし、この方法ではエラーが発生しやすくなります。 要素を追加して誤ってインデックスをスキップすると、配列にnil
要素が作成されます。
sharks[5] = "Sand"; print sharks;
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Sand"]
追加の配列要素にアクセスしようとすると、その値が返され、nil
になります。
sharks[4]
Outputnil
配列内で次に使用可能なインデックスを見つけることはエラーが発生しやすく、余分な時間がかかります。 push
メソッドを使用してエラーを回避します。このメソッドは、配列の最後に要素を追加します。
sharks.push("thresher") print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher"]
push
メソッドの代わりに<<
構文を使用して、配列の最後に要素を追加することもできます。
sharks << "Bullhead"
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]
配列の先頭に要素を追加するには、unshift()
メソッドを使用します。
sharks.unshift("Angel") print sharks
Output["Angel", "Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]
要素を追加する方法がわかったので、要素を削除する方法を見てみましょう。
要素の削除
配列から特定の要素を削除するには、delete
またはdelete_at
メソッドを使用します。 sharks
配列で、以前に誤ってnil
配列要素を作成しました。 それを取り除きましょう。
まず、配列内でその位置を見つけます。 index
メソッドを使用して、次のことを行うことができます。
print sharks.index(nil)
Output4
次に、delete_at
を使用して、インデックス4
の要素を削除し、配列を出力します。
sharks.delete_at(4) print sharks
Output["Angel", "Hammerhead", "Great White", "Tiger", "Whale", "Thresher", "Bullhead"]
delete
メソッドは、渡した値に一致する要素を配列から削除します。 これを使用して、アレイからWhale
を削除します。
sharks.delete("Whale") print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher", "Bullhead"]
delete
メソッドは、渡した値の all オカレンスを削除するため、配列に重複する要素がある場合、それらはすべて削除されます。
pop
メソッドは、配列の最後の要素を削除します。
sharks.pop print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher"]
Bullhead
は配列の最後の要素として削除されました。 配列の最初の要素を削除するには、shift
メソッドを使用します。
sharks.shift print sharks
Output["Hammerhead", "Great White", "Tiger", "Thresher"]
今回は、Angel
がアレイの先頭から削除されました。
pop
とshift
を使用すると、配列の最初と最後から要素を削除できます。 配列内の残りの項目は元のインデックス番号を保持するため、可能な限りpop
を使用することをお勧めします。
delete_at
、pop
、およびshift
メソッドはすべて、元の配列を変更し、削除した要素を返します。 この例を試してください:
sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"] deleted_at_element = sharks.delete_at(1) popped_element = sharks.pop puts "Deleted_at element: #{deleted_at_element}" puts "Popped element: #{popped_element}" puts "Remaining array: #{sharks}"
OuptutDeleted_at element: Great White Popped element: Whale Remaining array: ["Hammerhead", "Tiger"]
これで、配列から要素を削除するいくつかの方法がわかりました。 次に、すでに持っている要素を変更する方法を見てみましょう。
既存の要素の変更
配列内の要素を更新するには、通常の変数の場合と同じように、代入演算子を使用して要素のインデックスに新しい値を割り当てます。
インデックス0
に"Hammerhead"
がある新しいサメの配列が与えられたら、"Hammerhead"
を"Angel"
に置き換えましょう。
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"] sharks[0] = "Angel" print sharks;
Output["Angel", "Great White", "Tiger", "Whale"]
正しい要素を確実に更新するには、削除する要素を見つけるのと同じように、index
メソッドを使用して最初に要素を見つけることができます。
次に、配列内のすべての要素を操作する方法を見てみましょう。
配列の反復
Rubyには、配列を反復処理するための多くの方法が用意されており、使用する各方法は、実行する作業の種類によって異なります。 この記事では、配列を反復処理してその各要素を表示する方法について説明します。
Rubyはfor..in
構文を提供します。これは次のようになります。
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"] for shark in sharks do puts shark end
仕組みは次のとおりです。 sharks
配列の各要素について、Rubyはその要素をローカル変数shark
に割り当てます。 次に、puts
を使用して要素の値を出力できます。
ただし、for..in
はあまり表示されません。 Ruby配列はオブジェクトであり、要素を操作するためのeach
メソッドを提供します。 each
メソッドは、for..in
と同じように機能しますが、構文が異なります。
each.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"] sharks.each do |shark| puts shark end
each
メソッドは、Rubyプログラミングでよく見られる構文を使用します。 引数としてRubyブロックを取ります。 ブロックは、メソッドのコンテキストで後で実行されるコードです。 この場合、コードはputs shark
です。 パイプ文字(|
)で囲まれたshark
キーワードは、ブロックがアクセスする配列内の要素を表すローカル変数です。 Rubyは要素をこの変数に割り当て、ブロック内のコードを実行します。 each
メソッドは、配列内の要素ごとにこのプロセスを繰り返します。 結果は次のようになります。
OutputHammerhead Great White Tiger Whale
ブロックが1行しかない場合、Ruby開発者がdo
およびend
キーワードを中括弧に置き換え、ステートメント全体を次のように1行に要約することがよくあります。
each.rb
... sharks.each {|shark| puts shark }
これにより同じ結果が得られますが、使用するコード行が少なくなります。
each_with_index
メソッドも同様に機能しますが、配列要素のインデックスにアクセスすることもできます。 このプログラムは、each_with_index
を使用して、各要素のインデックスと値を出力します。
each_with_index.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"] sharks.each_with_index do |shark, index| puts "The index is #{index}" puts "The value is #{shark}" end
配列内の要素ごとに、Rubyはその要素を変数shark
に割り当て、現在のインデックスをindex
変数に割り当てます。 次に、ブロック内のこれらの変数の両方を参照できます。
このプログラムの結果は次のようになります。
OutputThe index is 0 The value is Hammerhead The index is 1 The value is Great White The index is 2 The value is Tiger The index is 3 The value is Whale
Webサイトのデータベースからアイテムを表示する必要がある場合や、ファイルから行を読み取ってその内容を処理する場合など、多くの場合、独自のプログラムで配列内の要素を相互作用します。
結論
配列は、Rubyでのプログラミングの非常に用途が広く基本的な部分です。 このチュートリアルでは、配列を作成し、個々の要素にアクセスしました。 また、配列内の要素を追加、削除、および変更しました。 最後に、配列を反復処理してその内容を表示する2つの方法を検討しました。これは、データを表示するための一般的な方法として使用されます。
チュートリアルRubyのデータ型についてを読んで、Rubyの他のデータ型について学習してください。