Ruby-配列

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

CやJavaの場合と同様に、配列のインデックス作成は0から始まります。配列の終わりに対して負のインデックスが想定されます。つまり、インデックス-1は配列の最後の要素を示し、-2は配列の最後の要素の次の要素を示します。

Ruby配列は、String、Integer、Fixnum、Hash、Symbol、さらには他のArrayオブジェクトなどのオブジェクトを保持できます。Ruby配列は、他の言語の配列ほど厳密ではありません。Ruby配列は、要素を追加するときに自動的に大きくなります。

配列の作成

配列を作成または初期化する方法はたくさんあります。1つの方法は、新しいクラスメソッドを使用することです。

names = Array.new

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

names = Array.new(20)

配列のサイズまたは長さは20要素になりました。sizeまたはlengthメソッドのいずれかを使用して配列のサイズを返すことができます-

#!/usr/bin/ruby

names = Array.new(20)
puts names.size  # This returns 20
puts names.length # This also returns 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)

配列作成のもう1つの形式は、次のとおりです。

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.[](...) [or] Array[...] [or] [...]

これにより、指定されたオブジェクトが入力された新しい配列が返されます。これで、作成されたオブジェクトを使用して、使用可能な任意のインスタンスメソッドを呼び出すことができます。例-

#!/usr/bin/ruby

digits = Array(0..9)
num = digits.at(6)
puts "#{num}"

これにより、次の結果が生成されます-

6
シニア番号 方法と説明
1

array & other_array

2つの配列に共通の要素を含み、重複のない新しい配列を返します。

2

array * int [or] array * str

selfのintコピーを連結して作成された新しい配列を返します。文字列引数を使用すると、self.join(str)と同等になります。

3

array + other_array

2つの配列を連結して3番目の配列を生成することによって構築された新しい配列を返します。

4

array - other_array

元の配列のコピーである新しい配列を返し、other_arrayにも表示されるアイテムをすべて削除します。

5

array <=> other_array

strをother_strと比較し、-1(より小さい)、0(等しい)、または1(より大きい)を返します。比較では大文字と小文字が区別されます。

6

array | other_array

配列をother_arrayと結合し、重複を削除して、新しい配列を返します。

7

array << obj

指定されたオブジェクトを配列の最後にプッシュします。この式は配列自体を返すため、複数の追加をチェーン化できます。

8

array <=> other_array

この配列がother_arrayより小さい、等しい、または大きい場合、整数(-1、0、または+1)を返します。

9

array == other_array

2つの配列が同じ数の要素を含み、各要素が(Object。==に従って)他の配列の対応する要素と等しい場合、2つの配列は等しくなります。

10

array[index] [or] array[start, length] [or]

array[range] [or] array.slice(index) [or]

array.slice(start, length) [or] array.slice(range)

インデックスの要素を返すか、開始から始まり長さの要素まで続くサブ配列を返すか、範囲で指定されたサブ配列を返します。負のインデックスは、配列の最後から逆方向にカウントされます(-1は最後の要素です)。インデックス(または開始インデックス)が範囲外の場合はnilを返します。

11

array[index] = obj [or]

array[start, length] = obj or an_array or nil [or]

array[range] = obj or an_array or nil

要素をインデックスに設定するか、開始から始まり長さ要素まで続くサブ配列を置き換えるか、範囲で指定されたサブ配列を置き換えます。インデックスが配列の現在の容量よりも大きい場合、配列は自動的に大きくなります。負のインデックスは、配列の末尾から逆方向にカウントされます。長さがゼロの場合に要素を挿入します。2番目と3番目の形式でnilが使用されている場合、selfから要素を削除します。

12

array.abbrev(pattern = nil)

self内の文字列の明確な略語のセットを計算します。パターンまたは文字列が渡された場合、パターンに一致するか、文字列で始まる文字列のみが考慮されます。

13

array.assoc(obj)

obj。==を使用して、要素が含まれている各配列の最初の要素とobjを比較する配列でもある配列を検索します。一致する最初に含まれる配列を返します。一致するものが見つからない場合はnilを返します。

14

array.at(index)

インデックスの要素を返します。負のインデックスは、自己の終わりから数えます。インデックスが範囲外の場合はnilを返します。

15

array.clear

配列からすべての要素を削除します。

16

array.collect { |item| block } [or]

array.map { |item| block }

selfの要素ごとに1回ブロックを呼び出します。ブロックによって返される値を含む新しい配列を作成します。

17

array.collect! { |item| block } [or]

array.map! { |item| block }

selfの要素ごとに1回ブロックを呼び出し、要素をblockによって返される値に置き換えます

18

array.compact

すべてのnil要素が削除されたselfのコピーを返します。

19

array.compact!

配列からnil要素を削除します。変更が加えられていない場合はnilを返します。

20

array.concat(other_array)

other_arrayの要素を追加し、自己

21

array.delete(obj) [or]

array.delete(obj) { block }

objに等しいアイテムをselfから削除します。アイテムが見つからない場合は、nilを返します。オプションのコードブロックが指定されている場合、アイテムが見つからない場合はブロックの結果を返します。

22

array.delete_at(index)

指定されたインデックスの要素を削除してその要素を返します。インデックスが範囲外の場合はnilを返します。

23

array.delete_if { |item| block }

すべての要素を削除し、自己いるブロックが真と評価します。

24

array.each { |item| block }

self内の要素ごとに1回ブロックを呼び出し、その要素をパラメーターとして渡します。

25

array.each_index { |index| block }

Array#eachと同じですが、要素自体ではなく要素のインデックスを渡します。

26

array.empty?

自己配列に要素が含まれていない場合はtrueを返します。

27

array.eql?(other)

arrayotherが同じオブジェクトであるか、両方が同じ内容の配列である場合、trueを返します。

28

array.fetch(index) [or]

array.fetch(index, default) [or]

array.fetch(index) { |index| block }

位置インデックスの要素を返そうとしますインデックスが配列の外側にある場合、最初のフォームはIndexError例外をスローし、2番目のフォームはデフォルトを返し、3番目のフォームは呼び出しブロックの値を返し、インデックスを渡します。配列の末尾からのインデックスカウントの負の値。

29

array.fill(obj) [or]

array.fill(obj, start [, length]) [or]

array.fill(obj, range) [or]

array.fill { |index| block } [or]

array.fill(start [, length] ) { |index| block } [or]

array.fill(range) { |index| block }

最初の3つのフォームは、selfの選択された要素をobjに設定します。nilの開始は、ゼロと同等です。nilの長さは、self.lengthと同等です。最後の3つの形式が埋めるブロックの値を持つ配列を。ブロックが充填される各要素の絶対インデックスに渡されます。

30

array.first [or]

array.first(n)

配列の最初の要素、または最初のn個の要素を返します。配列が空の場合、最初の形式はnilを返し、2番目の形式は空の配列を返します。

31

array.flatten

この配列を(再帰的に)1次元で平坦化した新しい配列を返します。

32

array.flatten!

アレイを所定の位置に平坦化します。変更が行われなかった場合はnilを返します。(配列にはサブ配列は含まれていません。)

33

array.frozen?

配列がフリーズしている(またはソート中に一時的にフリーズしている)場合はtrueを返します。

34

array.hash

配列のハッシュコードを計算します。同じ内容の2つの配列は、同じハッシュコードを持ちます。

35

array.include?(obj)

objselfに存在する場合はtrueを返し、それ以外の場合はfalseを返します。

36

array.index(obj)

自己の最初のオブジェクトのインデックス、つまり==からobjを返します。一致するものが見つからない場合はnilを返します。

37

array.indexes(i1, i2, ... iN) [or]

array.indices(i1, i2, ... iN)

このメソッドは最新バージョンのRubyで非推奨になっているため、Array#values_atを使用してください。

38

array.indices(i1, i2, ... iN) [or]

array.indexes(i1, i2, ... iN)

このメソッドは最新バージョンのRubyで非推奨になっているため、Array#values_atを使用してください。

39

array.insert(index, obj...)

指定されたインデックス(負の場合があります)を持つ要素の前に指定された値を挿入します。

40

array.inspect

印刷可能なバージョンの配列を作成します。

41

array.join(sep = $,)

配列の各要素をsepで区切られた文字列に変換して作成された文字列を返します。

42

array.last [or] array.last(n)

selfの最後の要素を返します。配列が空の場合、最初の形式はnilを返します。

43

array.length

self内の要素の数を返します。ゼロの可能性があります。

44

array.map { |item| block } [or]

array.collect { |item| block }

selfの要素ごとに1回ブロックを呼び出します。ブロックによって返される値を含む新しい配列を作成します。

45

array.map! { |item| block } [or]

array.collect! { |item| block }

配列の要素ごとに1回ブロックを呼び出し、要素をブロックによって返される値に置き換えます。

46

array.nitems

self内のnil以外の要素の数を返します。ゼロの可能性があります。

47

array.pack(aTemplateString)

TemplateStringのディレクティブに従って、配列の内容をバイナリシーケンスにパックします。ディレクティブA、a、およびZの後にカウントを続けることができます。これにより、結果のフィールドの幅がわかります。残りのディレクティブもカウントを取り、変換する配列要素の数を示します。カウントがアスタリスク(*)の場合、残りのすべての配列要素が変換されます。指定されたタイプの基になるプラットフォームのネイティブサイズを使用するために、ディレクティブの後にアンダースコア(_)を付けることができます。それ以外の場合は、プラットフォームに依存しないサイズを使用します。テンプレート文字列ではスペースは無視されます。

48

array.pop

配列から最後の要素を削除して返します。配列が空の場合はnilを返します。

49

array.push(obj, ...)

指定されたobjをこの配列の最後にプッシュ(追加)します。この式は配列自体を返すため、複数の追加をチェーン化できます。

50

array.rassoc(key)

要素が配列でもある配列を検索します。==を使用して、含まれている各配列の2番目の要素とキーを比較します。一致する最初に含まれる配列を返します。

51

array.reject { |item| block }

ブロックがtrueではないitems配列を含む新しい配列を返します。

52

array.reject! { |item| block }

ブロックがtrueと評価される配列から要素を削除しますが、変更が行われなかった場合はnilを返します。Array#delete_ifと同等です。

53

array.replace(other_array)

内容置き換えアレイの内容other_array切り詰めるか、必要に応じて拡大し、。

54

array.reverse

配列の要素を逆の順序で含む新しい配列を返します。

55

array.reverse!

アレイを元の位置に戻します。

56

array.reverse_each {|item| block }

Array#eachと同じですが、逆の順序で配列をトラバースします。

57

array.rindex(obj)

配列==の最後のオブジェクトのインデックスをobjに返します。一致するものが見つからない場合はnilを返します。

58

array.select {|item| block }

配列から連続する要素を渡すブロックを呼び出し、ブロックが真の値を返す要素を含む配列を返します。

59

array.shift

selfの最初の要素を返し、それを削除します(他のすべての要素を1つ下にシフトします)。配列が空の場合はnilを返します。

60

array.size

配列の長さ(要素の数)を返します。長さのエイリアス。

61

array.slice(index) [or] array.slice(start, length) [or]

array.slice(range) [or] array[index] [or]

array[start, length] [or] array[range]

インデックスの要素を返すか、開始から始まり長さの要素まで続くサブ配列を返すか、範囲で指定されたサブ配列を返します。負のインデックスは、配列の最後から逆方向にカウントされます(-1は最後の要素です)。インデックス(または開始インデックス)が範囲外の場合はnilを返します。

62

array.slice!(index) [or] array.slice!(start, length) [or]

array.slice!(range)

インデックス(オプションで長さ)または範囲で指定された要素を削除します。削除されたオブジェクト、サブ配列、またはインデックスが範囲外の場合はnilを返します。

63

array.sort [or] array.sort { | a,b | block }

selfをソートして作成された新しい配列を返します。

64

array.sort! [or] array.sort! { | a,b | block }

自己をソートします。

65

array.to_a

selfを返します。Arrayのサブクラスで呼び出された場合、レシーバーをArrayオブジェクトに変換します。

66

array.to_ary

自己を返します。

67

array.to_s

self.joinを返します。

68

array.transpose

selfは配列の配列であると想定し、行と列を転置します。

69

array.uniq

で重複する値を削除して、新しい配列を返します配列

70

array.uniq!

自己から重複要素を削除します。変更が加えられていない場合(つまり、重複が見つからない場合)はnilを返します。

71

array.unshift(obj, ...)

オブジェクトを配列の前に、他の要素を1つ上に追加します。

72

array.values_at(selector,...)

指定されたセレクター(1つ以上)に対応するself内の要素を含む配列を返します。セレクターは、整数のインデックスまたは範囲のいずれかです。

73

array.zip(arg, ...) [or]

array.zip(arg, ...){ | arr | block }

アレイへの引数を変換し、その後の要素マージ配列を各引数の対応する要素を有します。

アレイパックディレクティブ

シニア番号 指令と説明
1

@

絶対位置に移動します。

2

A

ASCII文字列(スペースが埋め込まれ、カウントは幅です)。

3

a

ASCII文字列(nullが埋め込まれ、カウントは幅です)。

4

B

文字列(ビット順の降順)。

5

b

ビット文字列(ビットの昇順)。

6

C

符号なし文字。

7

c

チャー

8

D, d

倍精度浮動小数点、ネイティブ形式。

9

E

倍精度浮動小数点、リトルエンディアンのバイトオーダー。

10

e

単精度浮動小数点、リトルエンディアンのバイト順序。

11

F, f

単精度浮動小数点、ネイティブ形式。

12

G

倍精度浮動小数点数、ネットワーク(ビッグエンディアン)バイトオーダー。

13

g

単精度浮動小数点、ネットワーク(ビッグエンディアン)バイトオーダー。

14

H

16進文字列(最初に高ニブル)。

15

h

16進文字列(最初に低いニブル)。

16

I

符号なし整数。

17

i

整数。

18

L

署名されていない長い。

19

l

長いです。

20

M

引用された印刷可能なMIMEエンコーディング(RFC 2045を参照)。

21

m

Base64でエンコードされた文字列。

22

N

長いネットワーク(ビッグエンディアン)バイトオーダー。

23

n

短いネットワーク(ビッグエンディアン)バイトオーダー。

24

P

構造体へのポインター(固定長文字列)。

25

p

nullで終了する文字列へのポインタ。

26

Q, q

64ビットの数値。

27

S

符号なしショート。

28

s

ショート。

29

U

UTF-8。

30

u

UUでエンコードされた文字列。

31

V

長いリトルエンディアンのバイトオーダー。

32

v

短いリトルエンディアンのバイトオーダー。

33

w

BER圧縮された整数\ fnm。

34

X

バイトをバックアップします。

35

x

ヌルバイト。

36

Z

nullが*で追加されることを除いて、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