Top > Ruby > 配列


配列 (Array)

Array(配列)オブジェクトとは、他のオブジェクトの所在を記憶し、それらへのアクセス手段を与える
コンテナ型」のオブジェクトである。

基本

配列の宣言

  • 方法1
    • Array オブジェクトの生成は、角括弧[] を使用して行う
    • 各括弧[] の中にオブジェクトを列挙することにより、それらを要素とする配列を生成できる
        0
        1
      
      num_array = [2, 4, 6]
      str_array = ["apple", Time.new, num_array] #=> ["apple", Time.new, [2, 4, 6]]
      
  • 方法2
    • Array のクラスメソッドを使用して宣言することもできる
    • Array.new(n, obj) で宣言できる
    • obj を省略すると、nil で補填
        0
        1
      
      Array.new(3, 10) #=> [10, 10, 10]
      Array.new(3)     #=> [nil, nil, nil]
      
  • 方法3
    • 文字列の配列をリテラルに生成するには %w を使う
    • 空白文字で切り分けて配列にする
    • 空白文字はバックスラッシュでエスケープできる
        0
      
      %w(one two three)  #=> ["one", "two", "three"]
      

要素へのアクセス

  • 配列参照メソッド[] (角括弧) で参照する
  • 配列の要素番号(インデックス)は、0 から始まる
  • インデックスが配列の大きさ以上であるときは、nil が返ってくる
  • インデックスの値が負の場合、配列の後ろから数えた位置の要素を返す
      0
      1
      2
      3
      4
      5
      6
      7
    
    num_array[2]    #=> 6
    str_array[0]    #=> "apple"
    str_array[2][2] #=> array[2] #=> 6
     
    num_array[3]    #=> nil
    num_array[-1]   #=> 6
    num_array[-3]   #=> 2
    num_array[-4]   #=> nil
    

要素の差し替え

  • 配列代入メソッド[] (角括弧) を使用する
  • 要素を指定して代入する
      0
      1
    
    num_array = [2, 4, 6]
    num_array[1] = 8       #=> [2, 8, 6] となる
    

要素の追加と取り出し

要素の追加 (push, unshift)

  • 既に生成されている配列に対して、要素を追加するメソッドに push と unshift がある
  • push は配列の末尾に追加する
  • unshift は配列の先頭に要素を追加する
      0
      1
      2
    
    num_array = [1, 2, 3]
    num_array.push(4)     #=> [1, 2, 3, 4] となる。この式の評価結果も同様
    num_array.unshift(0)  #=> [0, 1, 2, 3, 4] となる。この式の評価結果も同様
    

要素の取り出し (pop, shift)

  • pop は、配列の末尾から要素を取り出す。式の評価結果は、取り出した要素の値
  • shift は、配列の先頭から要素を取り出す。式の評価結果は pop と同様
  • 配列が空の場合、評価結果は nil となる
      0
      1
      2
      3
      4
      5
      6
      7
    
    num_array = [1, 2, 3]
    num_array.pop         #=> [1, 2] となる。この式の評価結果は 3
    num_array = [1, 2, 3]
    num_array.shift       #=> [2, 3] となる。この式の評価結果は 1
     
    num_array = []
    num_array.pop         #=> [] となる。この式の評価結果は nil
    num_array.shift       #=> [] となる。この式の評価結果は nil
    

配列の利用

ループ

要素ごとのループ (each)

  • each メソッドは、全ての要素に対して処理をする
      0
      1
      2
    
    [0, 1, 2].each do |x|
      puts x * x           #=> 0, 1, 4
    end

インデックスごとのループ (each_index, each_with_index)

  • each_index は、ブロックパラメータにインデックスを代入する
  • each_with_index はインデックスと共に要素もブロックパラメータに加える
      0
      1
      2
      3
      4
      5
      6
      7
    
    array = ["apple", "base", "cat"]
    array.each_index do |i|
      p [a[i], i]           #=> ["apple", 0], ["base", 1], ["cat", 2]
    end
     
    array.each_with_index do |x, i|
      p [x, i]              #=> ["apple", 0], ["base", 1], ["cat", 2]
    end

逆順のループ (reverse_each)

  • reverse_each は、配列の末尾から先頭に向かって逆順にループする
      0
      1
      2
    
    [0, 1, 2].reverse_each do |x|
      puts x * x           #=> 4, 1, 0
    end

演算子

連結 +
  • array1 + array2 は、2 つの配列を連結して新しいオブジェクトを返す
  • 元の配列自体を操作したい場合は、connect メソッドを使用する
      0
    
    [0, 1, 2] + [3, 4]   #=> [0, 1, 2, 3, 4]
    
差 -
  • array1 - array2 は、array1 の要素の内、array2 の要素と等しいものを省いた配列を返す
      0
    
    [0, 1, 2, 3, 4] + [3, 1]   #=> [0, 2, 4]
    
積 *
  • array * n は、array を n 個繋げたオブジェクトを返す
      0
    
    [0, 1, 2] * 3   #=> [0, 1, 2, 0, 1, 2, 0, 1, 2]
    
AND &
  • array1 & array2 は、共通する要素でできた配列を返す
  • 重複する要素は省かれる
      0
    
    [1, 1, 2, 2, 1] & [2, 1, 1, 3]   #=> [1, 2]
    
OR |
  • array1 | array2 は、何れかに属する要素でできた配列を返す
  • 重複する要素は省かれる
      0
    
    [1, 1, 2, 2, 1] | [2, 1, 1, 3]   #=> [1, 2, 3]
    

検索と検査

要素の検索 (index, rindex)

  • 配列 array のインデックス i に対する要素は array[i] で取り出せるが、
    要素 x が array に含まれているかどうかを知る為に index を使用する
  • もし見つかれば、その添え字を返し、なければ nil を返す
  • 末尾から検索する場合は、rindex を使用する
      0
      1
      2
      3
    
    ["apple", 0, "banana", 2, "apple"].index("banana")   #=> 2
    ["apple", 0, "banana", 2, "apple"].index("kiwi")     #=> nil
     
    ["apple", 0, "banana", 2, "apple"].rindex("apple")   #=> 4
    

要素の検査 (include?)

  • 配列の要素となっているか否かを調べるだけの場合に使用する
  • 返す値は true か false である
      0
      1
    
    ["a", "b", "c", "d", "e"].include?("a")  #=> true
    ["a", "b", "c", "d", "e"].include?("f")  #=> false
    

要素の抽出 (indexes)

  • 与えられたインデックスに対応する要素を配列として抽出する
  • indices も同様である
      0
    
    ["a", "b", "c", "d", "e"].indexes(1, 4, 3)  #=> ["b", "e", "d"]
    

その他のメソッド (nitems, size, length, empty?)

  • nitems は、nil でない要素の数を返す
  • size, length は、配列の大きさを返す
  • empty? は、配列の size が 0 か否かを真偽の値で返す
      0
      1
      2
      3
      4
      5
      6
      7
    
    [0, nil, 2, 3, nil].nitems   #=> 3
    [0, 1, 2].size               #=> 3
    [0, 1, 2].length             #=> 3
     
    array = [0, 1, 2]
    until array.empty?
      p array.shift     #=> 0, 1, 2
    end

リロード   凍結解除 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Mon, 03 Jun 2019 14:37:49 UTC (912d)