Rubyの配列(配列)


Ruby 配列は、任意のオブジェクトの順序付けされた整数インデックス付きコレクションです。配列内の各要素はインデックスに関連付けられており、インデックスを通じて取得できます。

配列のインデックスは、C や Java と同様に 0 から始まります。負のインデックスは配列の末尾を基準にしてカウントされます。つまり、インデックス -1 は配列の最後の要素を表し、-2 は配列の最後から 2 番目の要素を表し、以下同様となります。

Ruby 配列は、String、Integer、Fixnum、Hash、Symbol などのオブジェクト、さらには他の Array オブジェクトも格納できます。

Ruby 配列にはサイズを指定する必要はありません。Ruby 配列は、要素が配列に追加されると自動的に増加します。

配列の作成

配列を作成または初期化するには、さまざまな方法があります。 1 つの方法は、new クラス メソッドを使用する方法です:

names = Array.new

配列の作成中に配列のサイズを設定できます:

names = Array.new(20)

配列 names のサイズまたは長さは 20 要素です。 size または length メソッドを使用して、配列のサイズを返すことができます:

#!/usr/bin/ruby

names = Array.new(20)
puts names.size  # 返回 20
puts names.length # 返回 20


上記の例の出力結果は次のとおりです:

20
20

次のように、配列内の各要素に値を割り当てることができます:

#!/usr/bin/ruby

names = Array.new(4, "mac")

puts "#{names}"


上 上記の操作例の出力結果は次のとおりです:

["mac", "mac", "mac", "mac"]

new でブロックを使用することもでき、各要素にはブロック内の計算結果が入ります:

#!/usr/bin/ruby

nums = Array.new(10) { |e| e = e * 2 }

puts "#{nums}"


出力結果上記の操作例の例は次のとおりです:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Array と別の方法 [] は次のようになります:

nums = Array.[](1, 2, 3, 4,5)

配列作成の別の形式は次のようになります:

nums = Array[1, 2, 3, 4,5]

Ruby コア モジュールでは、のみを取る Array メソッドを使用できます。範囲を使用する単一のパラメーター 数値の配列をパラメーターとして作成します:

#!/usr/bin/ruby

digits = Array(0..9)

puts "#{digits}"

上記の例の出力は次のとおりです:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Array 組み込みメソッド

Array を呼び出すには Array オブジェクトのインスタンスが必要です方法。 Array オブジェクトのインスタンスを作成する方法は次のとおりです:

Array.[](...) [or] Array[...] [or] [...]

これは、指定されたオブジェクトが入った新しい配列を返します。これで、作成されたオブジェクトを使用して、利用可能なメソッドを呼び出すことができます。例:

#!/usr/bin/ruby

digits = Array(0..9)

num = digits.at(6)

puts "#{num}"

上記の例の出力結果は次のとおりです:

6

以下はパブリック配列メソッドです (array が Array オブジェクトであると仮定します):

1617array.collect! { |item| block } [or]array.compactすべての array.compact!配列からすべてのarray.concat(other_array)other_array の要素を array.delete(obj) [または] array.delete_at(index)指定されたarray.delete_if { |item| block }array.each { |item| }self の各要素に対して 1 回 block を呼び出し、その要素を引数として渡します。 30array.first [or] 31array. flatten32array. flatten!33array.frozen?34array.hash35array.include?(obj)36array.index(obj)37array.indexes(i1, i2, ... iN) [または]4445array.map! { |item| block } [or]array.nitemsarray.pack(aTemplateString) aTemplateStringの指示に従って、配列の内容をバイナリシーケンスに圧縮します。命令 A、a、および Z の後には、結果フィールドの幅を示す数値を続けることができます。残りの命令には、変換される配列要素の数を示す数値を含めることもできます。数値がアスタリスク (*) の場合、残りの配列要素はすべて変換されます。ディレクティブの後にはアンダースコア (_) を続けることができ、指定された型が基礎となるプラットフォームのネイティブ サイズを使用することを示します。それ以外の場合は、プラットフォームに依存しない一貫したサイズが使用されます。テンプレート文字列では空白は無視されます。 array.poparray.push(obj, ...)指定されたobjを配列の末尾に追加します。この式は配列自体を返すため、複数の加算を連鎖させることができます。 array.rassoc(key)要素が配列でもある配列を検索します。 == を使用して array.reject { |item| }block が true でない場合は、配列項目を含む新しい配列を返します。 6465666773

配列パック命令

次の表に、Array#pack メソッドの圧縮命令を示します。

シリアル番号メソッドと説明
1array & other_array
両方の配列の共通要素を重複なく含む新しい配列を返します。
2array * int [or] array * str
self の int コピーを連結して作成された新しい配列を返します。文字列パラメータを使用した場合、self.join(str) と同等。
3array + other_array
2 つの配列を連結して 3 番目の配列を生成することによって作成された新しい配列を返します。
4array - other_array
other_array に存在する項目が削除された、初期配列のコピーである新しい配列を返します。
5str <=> other_str
str と other_str を比較し、-1 (より小さい)、0 (等しい)、または 1 (より大きい) を返します。比較では大文字と小文字が区別されます。
6array | other_array
other_array を配列に追加することで、重複を削除し、新しい配列を返します。
7array << obj
指定されたオブジェクトを配列の末尾に追加します。この式は配列自体を返すため、複数の加算を連鎖させることができます。
8array <=> other_array
配列が other_array より小さい、等しい、または大きい場合、整数 (-1、0、または +1) を返します。
9array == other_array
2 つの配列に同じ数の要素が含まれており、各要素がもう一方の配列の対応する要素と等しい場合 (Object.== に従って)、2 つの配列は配列は等しいです。
10array[index] [or] array[start, length] [or]
array[range] [or] array.slice(index) [or]
array.slice(start, length) [または] array.slice(range)

インデックス index の要素、または start から始まり length 要素までの部分配列、または range で指定された部分配列を返します。負のインデックスは配列の末尾から数えます (-1 が最後の要素です)。 index (または開始インデックス) が範囲外の場合は、nil を返します。
11array[index] = obj [or]
array[start, length] = obj or an_array or nil [or]
array[range] = obj or an_array or nil

要素をインデックス index に設定するか、start から始まり length 要素までの部分配列を置き換えるか、range で指定された部分配列を置き換えます。インデックスが配列の現在の容量より大きい場合、配列は自動的に拡張されます。負のインデックスは配列の末尾から数えます。 length がゼロの場合、要素を挿入します。 nil が 2 番目または 3 番目の形式で使用される場合、要素は self から削除されます。
12array.abbrev(pattern = nil)
self内の文字列の明確な略語のセットを計算します。パターンまたは文字列を渡す場合、文字列がパターンに一致するか、その文字列で始まる場合のみが考慮されます。
13array.assoc(obj)
obj.== を使用して、含まれる各配列の最初の要素と obj を比較し、要素が配列でもある配列を検索します。一致が見つかった場合は最初に含まれる配列を返し、一致が見つからなかった場合は nil を返します。
14array.at(index)
インデックスindexを持つ要素を返します。負のインデックスは self の末尾からカウントされます。インデックスが範囲外の場合は nil を返します。
15array.clear
配列からすべての要素を削除します。
array.collect { |item| block } [or]array.map { |item| block }

self の要素ごとに 1 回 block を呼び出します。ブロックによって返された値を含む新しい配列を作成します。
array.map! }
self
の要素ごとに 1 回ずつ呼び出します。 blockによって返される値に置き換えられます。 18
nil 要素を削除した self
のコピーを返します。 19
nil要素を削除します。変更がない場合は nil
を返します。 20
self に追加します。
21
array.delete(obj) { block }obj
に等しい項目を
self
から削除します。等しいものが見つからない場合は、nilを返します。等価性が見つからず、オプションのコード block が指定された場合は、 block の結果が返されます。 22
indexの要素を削除し、その要素を返します。インデックスが範囲外の場合は、nil
を返します。 23
blockがtrueの場合、self
の各要素を削除します。 24
25array.each_index { |index| block }
Array#each と同じですが、要素自体の代わりに要素の index を渡します。
26array.empty?
配列自体に要素が含まれていない場合は true を返します。
27array.eql?(other)
arrayotherが同じオブジェクトであるか、2つの配列が同じ内容を持つ場合、trueを返します。
28array.fetch(index) [or]
array.fetch(index,default) [or]
array.fetch(index) { |index| block }

位置に戻ってみてくださいインデックス要素にあります。最初の形式は index が配列の外にある場合に IndexError 例外をスローし、2 番目の形式は default を返し、3 番目の形式は block を呼び出すときに index に渡された値を返します。負の index は配列の末尾から数えます。
29array.fill(obj) [または]
array.fill(obj, start [, length]) [または]
array.fill(obj, range) [または]
array.fill { |index| block } [or]
array.fill(start [, length] ) { |index| block } [or]
array.fill(range) { |index| 設定の最初の 3 つの形式
self
の選択された要素は obj です。 nil で始まる場合はゼロと同等です。 nilの長さはself.lengthと同等です。最後の 3 つの形式は、 配列にブロックの値 を埋めます。 block は、埋められる各要素の絶対インデックスとともに渡されます。
array.first(n)
配列の最初の要素または最初の
n
要素を返します。最初の形式は配列が空の場合 nil を返し、2 番目の形式は空の配列を返します。
1 次元のフラット化された配列である新しい配列を (再帰的に) 返します。
array
をフラット化します。変更がない場合は nil を返します。 (配列にはサブ配列が含まれません。)
array
がフリーズされている(またはソート中に一時的にフリーズされている)場合はtrueを返します。
配列のハッシュコードを計算します。同じ内容を持つ 2 つの配列は同じハッシュ コードを持ちます。
self
objが含まれる場合はtrueを返し、それ以外の場合はfalseを返します。
objに等しいself
の最初のオブジェクトのindexを返します。一致するものが見つからない場合は nil を返します。
array.indices(i1, i2, ... iN)
このメソッドは Ruby の最近のバージョンでは非推奨になっているため、代わりに Array#values_at を使用してください。
38array.indices(i1, i2, ... iN) [または]
array.indexes(i1, i2, ... iN)

このメソッドは、Ruby の最新バージョンでは非推奨ですなので、Array#values_at を使用します。
39array.insert(index, obj...)
指定された index の要素の前に指定された値を挿入します。index は負の値にすることもできます。
40array.inspect
配列の印刷可能なバージョンを作成します。
41array.join(sep=$,)
配列の各要素を文字列に変換し、sepを使用してそれらを区切ることによって作成された文字列を返します。
42array.last [または] array.last(n)
selfの最後の要素を返します。最初の形式は、配列がの場合にnilを返します。
43array.length
は、selfの要素の数を返します。おそらくゼロです。
array.map { |item| block } [or]array.collect { |item| block }

self の要素ごとに 1 回 block を呼び出します。ブロックによって返された値を含む新しい配列を作成します。
array.collect! }
array
の要素ごとに 1 回ずつ呼び出して要素を配置しますブロックによって返された値に置き換えられます。 46
self内の非nil要素の数を返します。おそらくゼロです。
47

48
arrayから最後の要素を削除し、その要素を返します。 array
が空の場合はnilを返します。 49

50
key を含まれる各配列の 2 番目の要素と比較します。一致するものがあれば、最初に含まれる配列が返されます。
51
52array.reject! { |item| block }
blockがtrueの場合はarrayから要素を削除し、変更がない場合はnilを返します。 Array#delete_if と同等。
53array.replace(other_array)
arrayの内容をother_arrayの内容に置き換え、必要に応じて切り詰めたり拡張したりします。
54array.reverse
配列要素を逆順に含む新しい配列を返します。
55array.reverse!
arrayを反転します。
56array.reverse_each {|item| block }
はArray#eachと同じですが、arrayを逆にします。
57array.rindex(obj)
objに等しい配列内の最後のオブジェクトのインデックスを返します。一致するものが見つからない場合は、nilを返します。
58array.select {|item| block }
配列から連続した要素を渡すブロックを呼び出し、ブロックが true 値を返すと、その要素を含む配列を返します。
59array.shift
self の最初の要素を返し、それを削除します (他のすべての要素を 1 つ下にシフトします)。配列が空の場合は nil を返します。
60array.size
arrayの長さ(要素数)を返します。長さの別名。
61array.slice(index) [or] array.slice(start, length) [or]
array.slice(range) [or] array[index] [or]
array[start, length] [または] array[range]

インデックス index の要素を返すか、start から始まり length 要素までの部分配列を返すか、range で指定された部分配列を返します。負のインデックスは配列の末尾から数えます (-1 が最後の要素です)。 index (または開始インデックス) が範囲外の場合は、nil を返します。
62array.slice!(インデックス) [または] array.slice!(開始、長さ) [または]
array.slice!(範囲)

deleteindex(長さはオプション) またはrange で指定された要素。削除されたオブジェクト、部分配列、または index が範囲外の場合は nil を返します。
63array.sort [or] array.sort { | a,b | block }
ソートされた配列を返します。
array.sort! [または] array.sort! { | a,b | ブロック }
array.to_a
selfを返します。 Array のサブクラスで呼び出された場合、受け取った引数は Array オブジェクトに変換されます。
array.to_ary自分自身を返します。
array.to_sself.join を返します。
68array.transpose
self は行と列が転置された配列の配列であると仮定します。
69array.uniq
array内の重複した値を削除した新しい配列を返します。
70array.uniq!
selfから重複した要素を削除します。変更がない場合 (つまり、重複が見つからなかった場合)、nil を返します。
71array.unshift(obj, ...)
オブジェクトを配列の前に置き、他の要素を 1 つ上の位置にシフトします。
72array.values_at(selector,...)
指定された selector (1 つ以上) に対応する self 内の要素を含む配列を返します。セレクターには、整数のインデックスまたは範囲を指定できます。
array.zip(arg, ...) [または] array.zip(arg, ...){ arr block }
任意の引数を配列に変換してから
array の要素は、各引数の対応する要素とマージされます。
コマンド 説明
@ 絶対位置に移動します。
AASCII 文字列 (スペースが埋め込まれ、カウントは幅です)。
aASCII 文字列 (null で埋められ、カウントは幅です)。
Bビット列(降順)
bビット列(昇順)。
C署名のない文字。
cの文字。
D、d倍精度浮動小数点数、ネイティブ形式。
E倍精度浮動小数点数、リトルエンディアンのバイトオーダー。
e単精度浮動小数点数、リトルエンディアンのバイトオーダー。
F、f単精度浮動小数点数、ネイティブ形式。
G倍精度浮動小数点数、ネットワーク (ビッグエンディアン) バイトオーダー。
g単精度浮動小数点数、ネットワーク (ビッグエンディアン) バイトオーダー。
H16 進文字列 (ビッグ エンディアン)。
h16進文字列(リトルエンディアン)。
I符号なし整数。
i整数。
L符号なしロング。
l長い。
M見積書は印刷可能、MIME エンコードされています。
mBase64 でエンコードされた文字列。
NLong、ネットワーク (ビッグエンディアン) バイトオーダー。
n短いネットワーク (ビッグエンディアン) バイトオーダー。
Pは構造体(固定長文字列)を指します。
pは、null で終わる文字列を指します。
Q、q64桁。
S無署名のショート。
s短い。
UUTF-8。
uUU でエンコードされた文字列。
Vロング、リトルエンディアンのバイトオーダー。
v短いリトルエンディアンのバイトオーダー。
wBER 圧縮整数 fnm。
X 1 バイト後方にスキップします。
xヌルバイト。
Z は、null に * が追加されることを除いて、 a と同じです。

次の例を試して、さまざまなデータを圧縮してください。

a = [ "a", "b", "c" ]
n = [ 65, 66, 67 ]
puts a.pack("A3A3A3")   #=> "a  b  c  "
puts a.pack("a3a3a3")   #=> "a
a  b  c
abc
ABC
0rrreee0brrreee0rrreee0crrreee0rrreee0" puts n.pack("ccc")      #=> "ABC"

上記の例の出力結果は次のとおりです:

rrreee