前 - 上 - 次 - 目次

# Array

  配列クラス．配列の要素は任意のRubyオブジェクトです．配列は一 般的には配列式:

  >     [1, 2, 3]

  で生成されます．

## スーパークラス:

  `Object`

## インクルードしているモジュール:

  Enumerable

## クラスメソッド:

  `Array[item...]`

    引数を要素として持つ配列を生成します．

  `new([size[, val]])`

    配列を生成します．sizeを指定したときにはその大き さの配列を生成します．valを指定したときには内容を その値で初期化します．valのデフォルトは`nil` です．

## メソッド:

  `self[nth]`

    nth番目の要素を返します．先頭の要素が0番目になり ます．nthの値が負の時には末尾からのインデックスと 見倣します(末尾の要素が -1 番目)．nth番目の要素が 存在しない時には`nil`を返します．

  `self[start..end]`

    start番目の要素からend番目の要素までの 部分配列を返します．startの値が負の時には末尾からのインデックスと 見倣します(末尾の要素が -1 番目)．startの値が配列の範囲に 収まらない場合`nil`を返します．endの値が 配列の長さを越える時には，越えた分の長さは無視されます． また，範囲の始点が終点よりも大きい時にはnilを返します．

  `self[start, length]`

    start番目からlength個の要素を含 む部分配列を返します．startの値が負の時には末尾からのインデックスと 見倣します(末尾の要素が -1 番目)．lengthがstart 番目からの配列の長さより長い時には，越えた分の長さは無視され ます．lengthが負の時にはnilを返します．

  `self[nth] = val`

    nth番目の要素をvalに設定します． nthが配列の範囲を越える時には配列が自動的に拡張さ れます．拡張されたものの代入されなかった要素は `nil` に初期化されます．

  `self[start..end] = val`

    start番目の要素からend番目の要素までを 配列valの内容に置換します．valの値が配 列でないときには`to_a`メソッドを使って配列に変換 します．valの要素の数の方が多い時には，後ろの要素 がずれます．

  `self[start, length] = val`

    start番目からlength個の要素を配列 valの内容で置き換えます．valが配列でな いときには`to_a`メソッドを使って配列に変換します． valの要素の数の方が多い時には，後ろの要素がずれま す．ですから，lengthが0の時にはインデックス直前の 位置への挿入になります．

    例:

    >     ary = [1, 2, 3, 4, 5]
    >     ary[0..2] = [0, 0] # 配列の内容は [0, 0, 4, 5]
    >     ary[1, 0] = [7]    # 配列の内容は [0, 7, 0, 4, 5]

  `self + other`

    配列の連結を行います．`self`とotherの 両方の配列の内容を繋げた新しい配列を返します．

  `self * times`

    配列の繰り返し．

  `self - other`

    集合の差演算．`self`からotherの要素を 取り除いた内容の新しい配列を返します．重複する要素取り除かれ ます．

  `self & other`

    集合の積演算．両方の配列に含まれる要素からなる新しい配列を返 します．重複する要素は取り除かれます．

  `self | other`

    集合の和演算．両方の配列にいずれかに含まれる要素を全て含む新し い配列を返します．重複する要素は取り除かれます．

  `self << obj`

    objを配列の末尾に追加します．このメソッドは配列そのものを返 すので，以下のように連鎖できます．

    >     array << obj1 << obj2

    この場合arrayには`[obj1, obj2]`が追加されます．

  `self <=> other`

    `self`と`other`の各要素をそれぞれ順に `<=>`で比較して，`self`が大きい 時に正，等しい時に０，小さい時に負の整数を返します．各要素が 等しいまま，一方だけ配列の末尾に達した時は，より短い配列の方 が小さいとみなします．

  `assoc(key)`

    配列の配列を検索して，その0番目の要素がkeyに等しいもの を返します．比較は`==`演算子を使って行われます．

    >     a = [[1,2],[2,4],[3,6]]
    >     a.assoc(2)		# => [2, 4]

  `clear`

    配列の大きさを0にします．

  `concat(other)`

    配列otherの要素を配列の末尾に(破壊的に)追加します． otherが配列でない時には変換されます．

  `compact`
  `compact!`

    配列から`nil`を取り除きます． `compact!`は削除を破壊的に行います．

  `delete(val)`
  `delete(val){ ... }`

    配列から要素valを削除します．ブロックを指定して呼 び出された時には，削除する要素がなかった時にブロックを評価し ます．

  `delete_at(pos)`

    posで指定された位置にある要素を取り除きます．取り 除かれた要素を返します．取り除く要素が存在しない時には `nil`を返します．

  `delete_if {|x|...}`
  `reject!{|x|...}`

    要素に対してブロックを評価し，ブロックが真を返した要素を削除 します．

  `clone`
  `dup`

    レシーバと同じ内容を持つ新しい配列を返します．フリーズした配 列の`clone`は同様にフリーズされた配列を返しますが， `dup`は内容の等しいフリーズされていない配列を返し ます．

  `each {...}`

    各要素に対してブロックを評価します．

  `each_index {...}`

    各要素のインデックスに対してブロックを評価します． つまり，`(0...ary.size).each {}`と同じです．

  `empty?`

    配列が空の時真を返します．

  `fill(val)`
  `fill(val, start[, length])`
  `fill(val, start..end)`

    配列(の指定された部分)の要素の値をvalに設定します． 2番めの形式でlengthが省略された時は配列の終りまで の長さを意味します．指定された部分配列が元の配列の範囲を越え る時は自動的に拡張され，拡張された部分は`nil`に初 期化されます．

  `filter{|item| ..}`

    配列の各要素内容を，その要素を引数にしてブロックを評価した値 に置き換えます．

  `flatten`
  `flatten!`

    ネストした配列を平滑化します．`flatten!`は配列を 破壊的に平滑化しますが，配列がネストしていないときには `nil`を返します．

  `freeze`

    配列の内容の変更を禁止します．

  `frozen?`

    配列の内容の更新が禁止されている時真を返します．

  `include?(val)`

    配列がvalと等しい要素を持つ時に真を返します．

  `index(val)`

    valと等しい最初の要素の位置を返します．等しい要素 がひとつもなかった時には`nil`を返します．

  `indexes(index_1,..., index_n)`
  `indices(index_1,..., index_n)`

    各引数の値をインデックスとする要素の配列を返します．配列に含 まれない要素が指定されても無視されます．

  `join([sep])`

    配列の要素をsepを間に挟んで連結した文字列を返しま す．sepが省略された場合には変数`$,` の値が使われます．

  `length`
  `size`

    配列の長さを返します．

  `nitems`

    `nil`でない要素の数を返します．

  `pack(template)`

    配列の内容をtemplateで指定された文字列にしたがっ て，バイナリとしてパックした文字列を返します．テンプレートは 型指定文字列とその長さ(省略時は1)を並べたものです．長さとし て`*`が指定された時は「残りのデータ全て」の長さを 表します．型指定文字は以下の通りです．

    > `a`
    >   ASCII文字列(nullを詰める)
    > `A`
    >   ASCII文字列(スペースを詰める)
    > `b`
    >   ビットストリング(下位ビットから上位ビット)
    > `B`
    >   ビットストリング(上位ビットから下位ビット)
    > `h`
    >   16進文字列(下位ニブルが先)
    > `H`
    >   16進文字列(上位ニブルが先)
    > `c`
    >   char
    > `C`
    >   unsigned char
    > `s`
    >   short
    > `S`
    >   unsigned short
    > `i`
    >   int
    > `I`
    >   unsigned int
    > `l`
    >   long
    > `L`
    >   unsigned long
    > `m`
    >   base64された文字列
    > `n`
    >   ネットワークバイトオーダーのshort
    > `N`
    >   ネットワークバイトオーダーのlong
    > `v`
    >   "VAX"バイトオーダー（リトルエンディアン)のshort
    > `V`
    >   "VAX"バイトオーダー（リトルエンディアン)のlong
    > `f`
    >   単精度浮動小数点数(機種依存)
    > `d`
    >   倍精度浮動小数点数(機種依存)
    > `p`
    >   ナル終端の文字列へのポインタ
    > `P`
    >   構造体(固定長文字列)へのポインタ
    > `u`
    >   uuencodedされた文字列
    > `x`
    >   ナルバイト
    > `X`
    >   1バイト後退
    > `@`
    >   絶対位置への移動

  `pop`

    配列の末尾の要素を取り除いて，それを返します．要素がない時に は`nil`を返します．

  `push(obj...)`

    objを配列の末尾に追加します．

  `rassoc(value)`

    配列の配列を検索して，その1番目の要素がvalueに等しいもの を返します．比較は`==`演算子を使って行われます．

    >     a = [[1,2],[2,4],[3,6]]
    >     a.rassoc(2)		# => [1, 2]

  `replace(other)`

    配列の内容をotherの内容で置き換えます．

  `reverse`
  `reverse!`

    `reverse`は全ての要素を逆順に並べた配列を返します． `reverse!`は配列の要素を逆順に(破壊的に)並べ替えます．

  `reverse_each {...}`

    各要素に対して逆順にブロックを評価します．

  `rindex(val)`

    valと等しい最後の要素の位置を返します．等しい要素 がひとつもなかった時には`nil`を返します．

  `shift`

    配列の先頭の要素を取り除き，取り除かれた要素を返します．残り の要素はひとつずつ前に詰められます．空配列に対しては `nil`を返します．

  `sort`
  `sort!`
  `sort {|a, b|...}`
  `sort! {|a, b|...}`

    配列の内容をソートします．ブロックを与えて呼び出された時には ブロックを2引数を与えて評価し，その結果で比較します． ブロックがない時には`<=>`演算子を使って 比較します．`sort`はソートされた新しい配列を返し， `sort!`は配列の内容をその場でソートします．

  `uniq`
  `uniq!`

    配列から重複した要素を取り除きます．取り除かれた要素の部分は 前に詰められます．`uniq!`は削除を破壊的に行います．

  `unshift(obj)`

    objを配列の先頭に追加します．各要素はひとつずつ後 ろにずれます．

前 - 上 - 次 - 目次

matz@netlab.co.jp