Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

Rubyの配列で使えるメソッド、二次元配列の使い方

Apr 26, 2019

Rubyの配列で使えるメソッド、二次元配列の使い方


配列の数、要素の長さ

index.rb
ary = ["aaaaa","aa","aaa"]
p ary.length
#=> 3 #配列の要素数

p ary[0].length
#=> 5 #配列の一番目にある文字の長さ

要素の特定、検索、場所

index.rb
#include?は要素の皆無を調べる
ary = ["a","b","c"]
p ary.include?("a")
#=>true
p ary.include?("d")
#=>false

#findは要素を探して取り出す
ary = [1,3,6,8]
p ary.find{|n| n % 3 == 0 }
#=> 3 #3で割り切れるものを一個しか返さない

p ary.find_all{|n| n % 3 == 0 }
#0> [3,6] #3で割り切れるもの全て返す

ary = ["a","ab","cc","ac","ds"]
p ary.find_all{|n| n.include?("a")}
#=>["a", "ab", "ac"] #aと含まれているものを返す

#indexは要素の位置を教えてくれる
ary = ["a","b","c"]
p ary.index("b")
#=> 1

要素を結合させる

ary = ["a","b","c"]
p ary.join
#=> "abc" #配列の中にある要素を全て結合

p ary.join(",")
#=> "a,b,c" #引数を指定するとそれを区切り文字とする

要素を順番に取り出して使う

ary = ["a","b","c"]

ary.each do |n|
  puts n
end
#=>"a","b","c"と順番に出力される

参考にしたサイト一覧
http://www.sejuku.net/blog/11843#index
http://ref.xaio.jp/ruby

多次元配列

多次元配列の作り方

index.rb
ary = Array.new(3)
p ary
#=> [nil,nil,nil] 

ary = Array.new(3, Array.new(3, "a") )
#=>[[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
#これで2次元配列ができる

ary = Array.new(3, Array.new(3, "a") )
#=>[["a", "a", "a"], ["a", "a", "a"], ["a", "a", "a"]]
#第二引数に要素を指定できる

要素の追加

index.rb
ary = Array.new(3, Array.new(3, "a") )
ary[0][0] = 1
p ary
#=> [[1, "a", "a"], [1, "a", "a"], [1, "a", "a"]]

ary = Array.new(3).map{Array.new(3,0)}
ary[0][0] = 1
p ary
#=> [[1, "a", "a"], ["a", "a", "a"], ["a", "a", "a"]]

上記の原因は全て同じオブジェクトとして認識されているため
そこでmapメソッドを使って別々のオブジェクトとして初期化

index.rb
ary = Array.new(3, Array.new(3, "a") )
p ary.map(&:object_id) #idを調べる
#=>[70167967248120, 70167967248120, 70167967248120]
同じobject_idが出るためmapで別々のオブジェクトに作り変える
index.rb
ary = Array.new(3).map{Array.new(3,0)}
p ary(&:object_id)
#=> [70190754844300, 70190754844200, 70190754844140]

下記のサイトを見ておお!ってなりました。
http://simanman.hatenablog.com/entry/2013/06/24/200306



ちなみにmap抜かしても同義になるので、そこはまだ謎です。

ary = Array.new(3){Array.new(3,0)}
p ary.map(&:object_id)
#=> [70322091142940, 70322091142840, 70322091142800]