Rubyで配列を使用する方法

前書き

_array_は、_elements_と呼ばれる値のリストを表すデータ構造です。 配列を使用すると、単一の変数に複数の値を保存できます。 これにより、コードが圧縮され整理され、読みやすく保守しやすくなります。 また、配列は独自のメソッドを持つオブジェクトであるため、データのリストを簡単に操作できます。

Rubyで。 配列には、数値、文字列、その他のRubyオブジェクトなど、任意のデータ型を含めることができます。

配列がどれほど強力であるかの簡単な例を見てみましょう。 メールアドレスのリストを管理しなければならないと想像してください。 配列がない場合、次のように変数に電子メールアドレスを格納できます。

emails.rb

email1 = "[email protected]"
email2 = "[email protected]"
email3 = "[email protected]"
email4 = "[email protected]"

このアプローチは冗長であり、柔軟性に欠けるため、すぐに維持が困難になる可能性があります。 別のメールアドレスを追加すると、追加の変数を追加して追跡する必要があります。

配列を使用する場合、このデータを単純化できます。

emails.js

5つの個別の変数を作成する代わりに、4つの電子メールアドレスすべてを含む1つの変数があります。 この例では、角括弧( + [] +)を使用して配列を作成し、各エントリをコンマで区切りました。 追加の電子メールアドレスを追加する必要がある場合は、新しい変数を作成および管理するのではなく、別の電子メールアドレスを配列に追加します。

特定のアイテム、または配列の_element_にアクセスするには、その_index_または配列内の位置を参照します。 Rubyでは、インデックスはゼロから始まります。 したがって、 `+ emails +`配列から最初の要素を取得するには、次のように角括弧を使用して変数に要素のインデックスを追加します。

print emails[0];

このチュートリアルでは、配列を作成し、含まれる値にアクセスし、配列内の要素を追加、変更、削除し、配列内の要素を繰り返し処理して、より複雑な問題を解決します。 まず、配列をより詳細に作成する方法を見てみましょう。

配列を作成する

Rubyプログラムで配列を作成するには、角括弧:( + [] +)を使用し、保存する値をコンマで区切ります。

たとえば、サメの配列を作成し、次のように変数に割り当てます。

sharks.rb

sharks = ["Hammerhead", "Great White", "Tiger"]

`+ print`ステートメントで配列全体を印刷できます。これにより、配列の内容が表示されます:

print sharks
Output["Hammerhead", "Great White", "Tiger"]

各エントリが単一の単語である配列を作成する場合は、 `+%w {} +`構文を使用して、_word array_を作成できます。

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 +`配列の各要素がどのようにインデックス付けされるかを示します。

Hammerhead Greate White Tiger

0

1

2

配列の最初の要素は「+ Hammerhead 」で、「 0+」でインデックス付けされます。 最後の要素は「+ Tiger 」で、「 2+」でインデックス付けされます。 カウントはインデックスの「0」から始まりますが、これは自然な直感に反して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", , "Sand"]

追加の配列要素にアクセスしようとすると、その値が返され、その値は「+ nil +」になります。

sharks[4]
Outputnil

配列内で次に使用可能なインデックスを見つけるにはエラーが発生しやすく、時間がかかります。 配列の末尾に要素を追加する `+ push +`メソッドを使用してエラーを回避します。

sharks.push("thresher")
print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", ]

`+ push `メソッドの代わりに ` << +`構文を使用して、配列の最後に要素を追加することもできます。

sharks << "Bullhead"
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", ]

配列の先頭に要素を追加するには、 `+ unshift()+`メソッドを使用します:

sharks.unshift("Angel")
print sharks
Output[, "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ブロックを取ります。 _block_は、後でメソッドのコンテキストで実行されるコードです。 この場合、コードは `+ 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

ウェブサイト上のデータベースのアイテムを表示する必要があるときや、ファイルから行を読み込んでそのコンテンツを処理するときなど、独自のプログラムで配列の要素を頻繁に操作します。

結論

配列は、Rubyでのプログラミングの非常に用途が広く、基本的な部分です。 このチュートリアルでは、配列を作成し、個々の要素にアクセスしました。 また、配列内の要素を追加、削除、および変更しました。 最後に、配列を反復してその内容を表示する2つの方法を検討しました。これは、データを表示する一般的な方法として使用されます。

チュートリアルhttps://www.digitalocean.com/community/tutorials/understanding-data-types-in-ruby[Rubyのデータ型について]を読んで、Rubyの他のデータ型について学習してください。