65
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-19

最近Rubyのアルゴリズム問題をよくといているので、メモ用に残しておきたいと思います。

もっと良いやり方あるぞ!他にも良い使い方あるぞって方がいたらぜひ教えて欲しいです!!

#配列

##ターミナルから文字を入力し、配列を作成

index.rb
ary = gets.split
#=> ターミナルでa b cと入力
p ary #=> ["a", "b", "c"]

###split

これを書くことにより、スペースを区切り文字として扱ってくれている。また,先頭・末尾の空白文字列を取り除きます。
(この空白文字は改行も含みます)

split == split(" ")の挙動をしてくれている

1引数に正規表現を渡すことで、そのパターンにマッチした文字列で区切ったり、第2引数に分割制限の値を渡すことで、分割個数を制限することができます

index.rb
ary = "aaa"
p ary.split("")
#=> ["a","a","a"] 1文字ごとに区切る

ary = "aaaaa"
p ary.split("", 3 )
#=> ["a", "a", "aaa"] 第2引数で個数を3個に制限

##配列の中にある要素の使い方

###要素の出し入れ

index.rb
ary = ["a","b","c"]
p ary[0]
#=> "a"

ary = ["a","b","c"]
ary[1] = "d"
p ary
#=> ["a", "d", "c"] #上書きされる

ary = ["a","b","c"]
ary[1,0] = "d"
p ary
#=> ["a", "d", "b", "c"] #上書きされない

###配列の数、要素の長さ

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]
65
50
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?