Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
88
Help us understand the problem. What is going on with this article?
@may88seiji

ruby 配列 基本操作まとめ

More than 1 year has passed since last update.

はじめに

rubyの勉強をはじめたので、
自分の思考の整理、メモとして配列に関しての基礎的なことを書きます。

  • terminalにてirbと打つことでコードを試すことができる。exitで終了
  • 拡張子.rbのファイルにコードを記述してterminalにてruby ファイル名 でコードを実行できる。
  • puts pで表示できる。jsで言うところconsole.log()
  • コメントアウトは#

ruby 繰り返し処理 基本操作まとめ

生成 取得 追加 更新 削除

  • 生成
array = [] 
# []
array = [1,2,3] 
# [1,2,3]
  • 連番
    範囲オブジェクトを利用 (first..last)
    .to_a で配列(Array)にできる
    *範囲オブジェクト
    「..」演算子の左辺に最初の値を指定し右辺に最後の値を指定します。最初と最後の値には数値や文字列などのオブジェクトが指定可能
 (1..5).to_a
# [1,2,3,4,5]
  • 取得
    配列[index]の形式
array  = ["a","b","c",nil]

p array[0]
#"a"
  • 追加
    使用してないindexを指定して代入
    push()を使用 末尾に追加
    <<を使用
array  = ["a","b","c","d"]
array[4] = "e"

p array
#["a", "b", "c", "d", "e"]

array.push("f")
p array
#["a", "b", "c", "d", "e", "f"]

array << 'hoge'
p array
#["a", "b", "c", "d", "e", "f", "hoge"]
  • 更新
    更新したいindexを指定して代入
array  = ["a","b","c","d"]
array[0] = "e"

p array
#["e", "b", "c", "d"]

  • 削除
    deleteメソッドを使用
    引数に削除した要素を指定 indexを指定、空の配列を代入することで削除も可能
array  = ["a","b","c","d","f"]
array.delete("a");

p array
#["b", "c", "d","f"]

#[index番号, 削除する個数]で指定
array[0,3] = []
p array
#["f"]

insert 挿入

第一引数に挿入するindex
第二引数に挿入する要素を指定

array = (1..5).to_a
array.insert(3,777)
p array
# [1, 2, 3, 777, 4, 5]

concat 配列の結合

引数に結合したい配列を指定

arrayA  = ["a", "b", "c"]
arrayB  = ["d", "e", "f"]
arrayA.concat(arrayB)
p arrayA
#["a", "b", "c", "d", "e", "f"]

join 結合した文字列の作成

引数に結合する際に使用するものを指定できる

array  = ['ruby','javascript','php','python']
newArray = array.join(',')
p newArray
#"ruby,javascript,php,python"

map 処理を加えて、新しい配列を生成

|a|の部分に配列の各要素が渡されて処理される。

array = (1..5).to_a
def map_test(array)
  array.map do |a|
    a*2
  end
end

newArray = map_test(array)
p newArray
p array

#[2, 4, 6, 8, 10]
#[1, 2, 3, 4, 5]

select 選択 絞り込み

array = (1..12).to_a
p array.select {|a| a % 2==0}

#[2, 4, 6, 8, 10, 12]

uniq 重複の削除

array = [1,1,2,2,2,3,4,4,5,8]
p array.uniq

#[1, 2, 3, 4, 5, 8]

length size count 要素の数をかぞえる

  • length sizeは基本的に同じ
array  = ["a","b","c"]
str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."

p array.length
p str.length

#3
#123
  • count
    引数を条件として、条件に合った要素の数だけを取得
array  = ["a","b","c"]

p array.count("a");

#1

nil(無)を除いた要素数を数える

array  = ["a","b","c",nil]
p array.size
p array.count{ |num| !num.nil? }

#4
#3

push pop unshift shift

  • push 末尾に追加
  • pop 末尾を削除
array  = ["a","b","c","d","e"]
array.push(1);
p array
#["a", "b", "c", "d", "e", 1]

array.pop
p array
#["a", "b", "c", "d", "e"]
  • unshift 先頭に追加
  • shift 先頭を削除
array  = ["a","b","c","d","e"]
array.unshift(1);
p array
#[1, "a", "b", "c", "d", "e"]

array.shift
p array
#["a", "b", "c", "d", "e"]

reverse reverse! 反転

reverseは反転して新しい配列を返す
reverse!は指定した配列そのものを判定して返す

array  = ["a","b","c","d","e"]
newArray = array.reverse
p array
p newArray
#["a", "b", "c", "d", "e"]
#["e", "d", "c", "b", "a"]

array.reverse!
p array
#["e", "d", "c", "b", "a"]

sort sort_by 並び替え

  • sort
    新しい配列を返す
    |a, b| の指定の仕方で昇順と降順を設定
    昇順
    a <=> b
    降順
    b <=> a
    降順の場合、 bがaより大きいときに1を返し、bがaより小さいときに-1を返す。bとaが等しいときは0を返す。 この返り値により、sortはbが大きいときはそのまま、bが小さいときはaと順番を入れ替る。bとaが等しいときにも何もしない挙動となる。
array  = [4,7,8,2,8,3,5,0,9,1,3]
newArray = array.sort
p newArray
#[0, 1, 2, 3, 3, 4, 5, 7, 8, 8, 9]
array  = [4,7,8,2,8,3,5,0,9,1,3]
newArray = array.sort{|a ,b| b<=>a}
p newArray
  • sort_by
    |a|の部分に並び替えの条件を設定できる
array  = ['ruby','javascript','php','python']
newArray = array.sort_by{|a| a.size}
p newArray
#["php", "ruby", "python", "javascript"]

降順にはreverseを使う

array  = ['ruby','javascript','php','python']
newArray = array.sort_by{|a| a.size}.reverse
p newArray

#["javascript", "python", "ruby", "php"]

まだまだありますが、とりえあえずここで止めます。
次は配列の繰り返し処理についてまとめたいと思います。

88
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
88
Help us understand the problem. What is going on with this article?