English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby 配列(Array)

Rubyの配列は、任意のオブジェクトの並び立てられた整数インデックスの集合です。配列の各要素はインデックスと関連付けられており、インデックスを通じてアクセスできます。

配列のインデックスは0から始まり、CやJavaと同じです。負のインデックスは配列の末尾から数えられるため、インデックスが -1 配列の最後の要素を示します。-2 配列の最後の二番目の要素を示します。そのようにして続けます。

Rubyの配列はString、Integer、Fixnum、Hash、Symbolなどのオブジェクトを格納することができ、他の配列オブジェクトも格納できます。

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

配列の作成

配列の作成や初期化にはいくつかの方法があります。その一つは以下の通りです: 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"]

新しいブロックを使用して、各要素をブロック内の計算結果で埋めることができます:

オンラインサンプル

#!/usr/bin/ruby
 
nums = Array.new(10) { |e| e = e * 2 }
 
puts "#{nums}"

以下の例の実行結果は次の通りです:

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

配列には別のメソッド、[]があります:

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

配列の作成の別の形式は以下の通りです:

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

Ruby コアモジュールでは、範囲を引数として使用して数字配列を作成する単一の引数を受け取る配列メソッドがあります:

オンラインサンプル

#!/usr/bin/ruby
 
digits = Array(0..9)
 
puts "#{digits}"

以下の例の実行結果は次の通りです:

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

配列内蔵メソッド

Array メソッドを呼び出すために Array オブジェクトの例が必要です。以下は Array オブジェクトを生成する方法の例です:

Array.[](...) [または] Array[...] [または] [...]

これは指定されたオブジェクトを使用して新しい配列を埋める結果を返します。現在、作成されたオブジェクトを使用して、任意の利用可能なメソッドを呼び出すことができます。例えば:

オンラインサンプル

#!/usr/bin/ruby
 
digits = Array(0..9)
 
num = digits.at(6)
 
puts "#{num}"

以下の例の実行結果は次の通りです:

6

以下は一般的な配列メソッドです(仮定して): array Array オブジェクトです):

順序番号メソッド & 説明
1array & other_array
新しい配列を返します。二つの配列の共通要素を含み、重複はありません。
2array * int [or] array * str
selfのintエンカードのコピーを作成して新しい配列を返します。String引数が指定された場合、self.join(str)と等しいです。
3array + の内容を
二つの配列を結合して、第三つの配列を作成する新しい配列を返します。
4array - の内容を
other_arrayに現れる項を除いた元の配列のコピーを作成して新しい配列を返します。
5str <=> other_str
strとother_strを比較し、 -1(小さい)、0(等しい)または 1(大きい)。比較は大文字と小文字を区別します。
6array | other_array
other_arrayをarrayに加え、重複を取り除き、新しい配列を返します。
7array << obj
指定されたオブジェクトを配列の末尾に付加します。この式は配列自身を返すので、いくつかの追加を連結できます。
8array <=> other_array
arrayがother_arrayより小さい、等しい、または大きい場合、整数を返します(-1、0または +1)。
9array == other_array
二つの配列が同じ要素数を持ち、それぞれの要素が Object.== に基づいてもう一方の配列の対応する要素と一致する場合、その二つの配列は等しいと見なされます。
10array[index] [or] array[start, length] [or]
array[range] [or] array.slice(index) [or]
array.slice(start, length) [or] 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 が0の場合に要素を挿入します。第二种または第三種形式で nil、それから self 要素を削除します。
12array.abbrev(pattern = nil)
self の文字列計算が明確な省略集合です。パターンまたは文字列を渡した場合、文字列がパターンに一致するか、またはその文字列で始まる場合のみを考慮します。
13array.assoc(obj)
を検索し、各要素が配列である場合、obj.==を使ってobjを各含まれる配列の最初の要素と比較します。一致する場合、最初の含まれる配列を返します。一致しない場合は、 nil
14array.at(index)
を返します。負のインデックスは、 self の末尾からカウントを開始します。インデックスが範囲外の場合は nil を返します。
15array.clear
から全ての要素を削除します。
16array.collect { |item| block } [or]
array.map { |item| block }

self の各要素に対して一度だけ呼び出されます。 ブロック。ブロックが返す値を含む新しい配列を作成します。
17array.collect! { |item| block } [or]
array.map! { |item| block }

self の各要素に対して一度だけ呼び出されます。 ブロックを置き換えます。 ブロック を削除します。
18の返値から
を返します self array.compact nil のコピーを返し、全ての
19の要素を削除します。
array.compact! nil から全ての nil
20の要素を返します。変更がない場合は、
array.concat(other_array) self に追加します。
21から削除します。
array.delete(obj) [or]

から self array.delete(obj) { block } obj から一致する項を削除します。 nil。もし一致する項が見つからずオプションのコードが提供された場合は、 ブロックが存在しない場合に、 ブロック の結果を返します。
22array.delete_at(index)
指定された index の要素を削除し、その要素を返します。index が範囲外の場合は、 nil
23array.delete_if { |item| block }
の場合 ブロック が true であれば、削除します。 self の各要素。
24array.each { |item| block }
self の各要素に対して一度だけ呼び出されます。 ブロック、その要素をパラメータとして渡します。
25array.each_index { |index| block }
Array#each と同じですが、要素をパラメータとして渡します。 index、ではなく要素自体を渡します。
26array.empty?
配列自体に要素が含まれていない場合に true を返します。
27array.eql?(other)
もし arrayother は同じオブジェクトであるか、または二つの配列が同じ内容を持っている場合に true を返します。
28array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }

を試みます index の位置 index の要素を返します。一致するものがあれば 配列の外に位置している場合、第一の形式は を返します。 IndexError、第二の形式は ブロック 、第三の形式はデフォルトの値を返します。 index を渡します。 index の値です。負の値の
29配列の最後から数えて
array.fill(obj) [または]
array.fill(obj, start [, length]) [または]
array.fill(obj, range) [または]
array.fill { |index| block } [または]
array.fill(start [, length] ) { |index| block } [または]

array.fill(range) { |index| block } self の前の三つの形式で設定されます。 objの選択された要素が nil の先頭はゼロに相当します。nil の長さは self.lengthの最後の三つの形式はブロックの値を使用します。を埋めます。配列。ブロック 各要素の絶対インデックスを含むブロックを渡して
30array.first [または]
array.first(n)

配列の最初の要素または前 n 要素があります。配列が空の場合、一つの形式は nil、二つの形式は空の配列を返します。
31array.flatten
新しい配列を返します。新しい配列は一つの次元のフラット化された配列です(再帰的)。
32array.flatten!
array.reverse! array をフラット化します。変更がない場合は、 nil。(配列にはサブ配列は含まれていません。)
33array.frozen?
もし array が凍結(またはソート中に一時的に凍結)されている場合、trueが返されます。
34array.hash
配列のハッシュコードを計算します。内容が同じ配列は同じハッシュコードを持つことになります。
35array.include?(obj)
もし self に含まれる objが返されます。一致するものがあればtrue、そうでない場合はfalseが返されます。
36array.index(obj)
を返します self objに等しい最初のオブジェクトの index。一致するものが見つからない場合、 nil
37array.indexes(i1, i2, ... iN) [または]
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 中の要素の数。0である可能性があります。
44array.map { |item| block } [または]
array.collect { |item| block }

self の各要素に一度だけ呼び出されます。 ブロック。ブロックが返す値を含む新しい配列を作成します。
45array.map! { |item| block } [または]
array.collect! { |item| block }

array の各要素に一度だけ呼び出されます。 ブロック、要素をブロックが返す値に置き換えます。
46array.nitems
を返します self 中のnon-nil要素の数。0である可能性があります。
47array.pack(aTemplateString)
aTemplateStringの命令に基づいて、配列の内容をバイナリーシーケンスに圧縮します。命令A、a、Zの後には、結果フィールドの幅を示す数字を追加できます。残りの命令も、変換する配列要素の数を示す数字を持ちます。数字が星号(*)、残りの配列のすべての要素が変換されます。任意の命令の後には下線(_)を追加することができ、これはベースプラットフォームのローカルサイズを使用する指定を意味します。それ以外の場合、プラットフォームに依存しない一貫したサイズを使用します。テンプレート文字列ではスペースは無視されます。
48array.pop
から array 最後の要素を中から削除し、その要素を返します。もし array 空の場合は返します nil
49array.push(obj, ...)
指定されたobjを配列の末尾に付加します。この式は配列自身を返すので、複数の付加を連続して行うことができます。
50array.rassoc(key)
要素が配列の配列である配列を検索し、==を使用して key 含まれる各配列の第二要素と比較します。一致すれば最初に含まれる配列を返します。
51array.reject { |item| block }
ブロックがtrueでない要素を含む新しい配列を返します。
52array.reject! { |item| block }
ブロックが真のとき、以下から array 削除要素、変更がない場合には返します。 nil相当于 Array#delete_if。
53array.replace(other_array)
array.reverse! array array.replace(other_array) の内容を other_array
54の内容を、必要に応じてカットまたは拡張します。
array.reverse
55新しい配列を返し、配列の要素を逆順に並べ替えます。
array.reverse! array array.reverse_each {|item| block }
56新しい配列を返し、配列の要素を逆順に並べ替えます。
を逆転します。 array array.reverse_each {|item| block }
57を逆転します。
array.rindex(obj) nil
58array.select {|item| block }
配列に連続する要素をブロックに渡し、ブロックが返す配列を含む配列を返します。 true の値を持つ要素。
59array.shift
を返します self の最初の要素を取り除き、すべての他の要素を一つずつ下に移動します。配列が空の場合、以下を返します nil
60array.size
を返します array の長さ(要素の数)。length の別名です。
61array.slice(index) [または] array.slice(start, length) [または]
array.slice(range) [または] array[index] [または]
array[start, length] [または] array[range]

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

削除します index(長さはオプションです)または range 指定された要素。削除されたオブジェクト、子配列が返されます、もしない場合 index 範囲外の場合、以下を返します nil
63array.sort [または] array.sort { |a, b| block }
並べ替えられた配列を返します。
64array.sort! [または] array.sort! { |a, b| block }
配列を並べ替えます。
65array.to_a
を返します self。もしない場合 Array のサブクラスで呼び出された場合、受け取った引数を Array オブジェクトに変換します。
66array.to_ary
selfを返します。
67array.to_s
self.joinを返します。
68array.transpose
selfが配列の配列であると仮定し、行と列を交換します。
69array.uniq
新しい配列を返し、 array の重複値を削除します。
70array.uniq!
から self から重複要素を削除します。変更がない場合(つまり、重複が見つからない場合)は、 nil
71array.unshift(obj, ...)
要素を配列の先頭に配置し、他の要素を1つずつ上に移動します。
72array.values_at(selector,...)
selfに指定された selector(1つまたは複数)対応する要素。
73array.zip(arg, ...) [or]
array.zip(arg, ...){ | arr | block }

任何引数を配列に変換し、それを array の要素と各引数の対応する要素を合併します。

配列 pack 命令

以下の表にArray#packの圧縮命令を挙げます。

命令説明
@絶対位置に移動。
AASCII 文字列(spaceでフィルタ,countは幅)。
aASCII 文字列(nullでフィルタ,countは幅)。
Bビット文字列(降順)
bビット文字列(昇順)。
C無符号文字。
c文字。
D, d双精度浮動小数点数,オリジナル形式。
E双精度浮動小数点数,little-endian バイトオーダー。
e単精度浮動小数点数,little-endian バイトオーダー。
F, f単精度浮動小数点数,オリジナル形式。
G双精度浮動小数点数,network(big-endian)バイトオーダー。
g単精度浮動小数点数,network(big-endian)バイトオーダー。
H十六進文字列(高位優先)。
h十六進文字列(低位優先)。
I無符号整数。
i整数。
L無符号 long。
lLong。
M印刷可能な、MIME エンコードを参照。
mBase64 エンコード文字列。
NLong,network(big-endian)バイトオーダー。
nShort,network(big-endian)バイトオーダー。
P構造体(固定長度の文字列)を指す。
p指す空終了文字列。
Q, q64 位数字。
S無符号 short。
sShort。
UUTF-8。
uUU エンコード文字列。
VLong、little-endian バイトオーダー。
vShort、little-endian バイトオーダー。
wBER 圧縮の整数 \fnm。
X1バイトをスキップします。
xヌルバイト。
Znull が追加される以外で a と同じです *。

オンラインサンプル

以下のサンプルを試してみてください、様々なデータを圧縮します。

オンラインサンプル

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

以下の例の実行結果は次の通りです:

a  b  c
abc
ABC