独学Ruby - 基礎(Arrayクラス)

配列クラス(Array)

  • 配列の作り方
  • インデックスの使い方
  • 集合としての配列
  • 列としての配列

配列の作り方

  • 基本
# 基本
my_array = [1, 2, 3, "1", "2", "3"]
p my_array
[1, 2, 3, "1", "2", "3"]
  • Array.new(要素数, 初期値)
#  Array.new
my_array = Array.new
p my_array

my_array = Array.new(6)
p my_array

my_array = Array.new(6, 0)
p my_array
[]
[nil, nil, nil, nil, nil, nil]
[0, 0, 0, 0, 0, 0]
  • %w
#  %w
lang = %w(RUby Perl Python Scheme Pke REBOL)
p lang
["RUby", "Perl", "Python", "Scheme", "Pke", "REBOL"]
  • to_aメソッド

    多くのクラスで定義されており、オブジェクトを配列に変換する

# to_aメソッド
color_table = {"block"=>"#000000", "white"=>"#FFFFFF"}
p color_table.to_a
[["block", "#000000"], ["white", "#FFFFFF"]]
  • splitメソッド

    カンマや空白で区切られた文字列から配列を作る

# splitメソッド
column = "2010/01/09 22:33 foo.html proxy.example.jp".split()
p column

column = "2010/01/09 22:33 foo.html proxy.example.jp".split(" ")
p column

column = "2010/01/09,22:33,foo.html,proxy.example.jp".split(",")
p column
["2010/01/09", "22:33", "foo.html", "proxy.example.jp"]
["2010/01/09", "22:33", "foo.html", "proxy.example.jp"]
["2010/01/09", "22:33", "foo.html", "proxy.example.jp"]

インデックスの使い方

要素を取り出す

  • 添え字指定
my_array = [1 ,2 ,3 ,4, 5, 6]
p my_array[0]

# マイナスインデックス
p my_array[-1]

# 範囲指定
p my_array[0..2]
p my_array[0, 3]
1
6
[1, 2, 3]
[1, 2, 3]
  • atメソッド
# atメソッド
p my_array.at(0)
p my_array[0]
  • sliceメソッド
# sliceメソッド
p my_array.slice(1)
p my_array[1]

p my_array.slice(-1)
p my_array[-1]

p my_array.slice(0..2) 
p my_array[0..2]

p my_array.slice(0, 3)
p my_array[0, 3]

要素を置き換える

alpha = ["a", "b", "c", "d", "e", "f"]
p alpha

alpha[2, 3] = ["C", "D", "E"]
p alpha

alpha[0..1] = ["A", "B"]
p alpha

alpha[-1] = "F"
p alpha
["a", "b", "c", "d", "e", "f"]
["a", "b", "C", "D", "E", "f"]
["A", "B", "C", "D", "E", "f"]
["A", "B", "C", "D", "E", "F"]

要素を挿入する

alpha = ["a", "b", "c", "d", "e", "f"]
p alpha

alpha[2, 0] = ["X", "Y"]
p alpha
["a", "b", "c", "d", "e", "f"]
["a", "b", "X", "Y", "c", "d", "e", "f"]

複数のインデックスから配列をつくる

  • values_atメソッド
alpha = %w(a b c d e f)
p alpha

p alpha.values_at(1, 3 ,5)
["a", "b", "c", "d", "e", "f"]
["b", "d", "f"]

集合としての配列

  • 共通集合
  • 和集合
  • 差集合
# 共通集合 (AND, OR)
ary1 = ["a", "b", "c"]
ary2 = ["b"]
p (ary1 & ary2)
p (ary1 | ary2)
p ary1 + ary2
p ary1 - ary2

# 和差演算
ary1 = [1, 2, 3]
ary2 = [4, 3, 2]
p (ary1 & ary2)
p (ary1 | ary2)
p ary1 + ary2
p ary1 - ary2
["b"]
["a", "b", "c"]
["a", "b", "c", "b"]
["a", "c"]

[2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 3, 2]
[1]

列としての配列

  • キュー
  • スタック
機能 先頭に要素を追加する操作 末尾に要素を追加する操作
要素を加える unshift push
要素を取り除く shift pop
要素を参照する first last
alpha = ["a", "b", "c", "d", "e"]
p alpha

# 末尾に要素を追加する
p alpha.push("f")

# 末尾から要素を取り除く
p alpha.pop

# 末尾の要素を参照する
p alpha.last

# 先頭に要素を追加する
p alpha.unshift("F")

# 先頭から要素を取り除く
p alpha.shift

# 先頭の要素を参照する
p alpha.first
["a", "b", "c", "d", "e"]
["a", "b", "c", "d", "e", "f"]
"f"
"e"
["F", "a", "b", "c", "d", "e"]
"F"
"a"

配列操作メソッド

機能 メソッド
配列の先頭に新しい要素を付け加える a.unshift(item)
配列の末尾に新しい要素を付け加える a << item
a.push(item)
配列aに配列bを連結する a.concat(b)
a+b
配列から要素(nil)を取り除く a.compact
a.compact!
配列から要素(x)を取り除く a.delete(x)
配列からn番目の要素を取り除く a.delete_at(n)
配列から条件を満たす要素を取り除く a.delete_if{|item|...}
a.reject{|item|...}
a.reject!{|item|...}
# obj.unshift(item)
a = [1,2,3,4,5]
p a
a.unshift(0)
p a

p "-----------------"

# a << item
a = [1,2,3,4,5]
p a
a << 6
p a

p "-----------------"

# a.push(item)
a = [1,2,3,4,5]
p a
a.push(6)
p a

p "-----------------"

# a.concat(b)
a = [1,2,3]
b = [4,5,6]
print "a=", a, "b=", b , "\n"
c = a.concat(b)
print "c=", c, "\n"

p "-----------------"

# a+b
a = [1,2,3]
b = [4,5,6]
print "a=", a, "b=", b , "\n"
c = a + b
print "c=", c, "\n"

# a.compact
a = [1, nil, 3, nil, nil]
b = a.compact
print "a=", a, "b=", b,"\n"
a.compact!
print "a=", a, "b=", b,"\n"

p "-----------------"

# delete
a = [1, 2, 3, 2, 1]
p a
del_value = a.delete(2)
p del_value
p a


p "-----------------"

# delete_at
a = [1, 2, 3, 2, 1]
p a
del_value = a.delete_at(0)
p del_value
p a

p "-----------------"

# delete_if
a = [1, 2, 3, 2, 1]
b = a.delete_if{|i| i >= 2}
p b

p "-----------------"

# reject, reject!
a = [1, 2, 3, 2, 1]
b = a.reject{|i| i >= 2}
p b

a = [1, 2, 3, 2, 1]
b = a.reject!{|i| i >= 2}
p b