情報学部 菅沼ホーム 目次 索引

Array クラス

  配列を扱うクラスです.配列は,複合データ型の一種であり,複数のデータを処理する場合に利用されます.Ruby においては Array クラスのインスタンスとして定義され,例えば,
x = Array[1, 2.3, "abc"];   # x = [1, 2.3, "abc"]; でも可		
のように宣言すれば,3 つのデータを記憶できる領域が確保され,各要素に記憶される値が 1,2.3,"abc" で初期設定されます.また,変数名と添え字を利用して,x[0],x[1],x[2] のようにして参照できます.この例に示すように,各要素は,必ずしも,同じデータ型である必要はありません.しかし,間違いの元になる可能性がありますので,配列は,同じデータ型だけで構成するようにした方が良いと思います.また,プログラムの実行時に,要素の追加,削除等を行うことが可能です.このような点から,Array クラスは,C++ 標準ライブラリ内の vector クラスに似ています.

  例えば,
u1 = Array[1, "abc", 2];
u2 = Array[1, "abc", 2];
u3 = u1;		
の最初の 2 行では,同じ値で初期設定された 2 つの配列 u1,u2 を定義し,次の行において u1 を u3 に代入しています.しかし,この代入は,整数型の場合のような代入ではありません.つまり,u1 の領域及びそこに記憶されている要素をすべてコピーし,u3 に代入しているわけではありません.ここでは,u1,u2,u3 をポインタとしてとらえた方が理解しやすいと思います.つまり,2 行目の代入によって,u1 に記憶されているアドレスが u3 に記憶され,u1 と u3 が同じ領域を指しているという意味です.実際,u1 の値を変更すれば,u3 の値も変化します(逆も同様).配列を関数の引数として渡す場合も,ポインタを引数とすることに相当しますので,関数内で配列の要素の値を変更すれば,関数を呼んだ側における対応する要素の値も変化します.このことを概念的に示せば以下のようになります.
  多次元の配列を扱うことも可能です.例えば,
v1 = Array[[10, 20, 30], [40, 50, 60]];
v2 = Array[[10, 20, 30], [40, 50, 60]];
v3 = v1;		
のように,配列の要素を,さらに配列として定義すれば,2 次元の配列を定義できます.この例では,2 行 3 列の配列になります.3 行目の記述によって,v3 も,v1 と同じ 2 行 3 列の配列になります.そのイメージは,new 演算子を使用した C++ の場合と同じく,以下のようになります.
  また,
v4 = v1[0];   // v1,v3 の 1 行目		
のように,各行を 1 次元配列として扱うことも可能です.勿論,v4 と v1[0] は同じ場所を指していますので,例えば,v4[1] の値を変更すれば,v1[0][1] の値も変化します(逆も同様).しかし,すべてのデータが連続した領域に確保されるとは限らないため,異なる行のデータを,連続した 1 次元配列とみなして参照することはできません.
  以下,多くのメソッドが挙げられていますが,同じ機能を持つものであれば,「記述しやすい」ではなく,「理解しやすい」ものを使用するようにしてください.

[インクルードモジュール]
[クラスメソッド]
  • Array 配列の生成
  • new 配列の生成
[メソッド]
  • [nth] nth 番目の要素
  • [start..end] ( start 番目 ~ end 番目)の要素からなる部分配列
  • slice(start..end) ( start 番目 ~ end 番目)の要素からなる部分配列
  • [start,length] start 番目から length 個の要素を含む部分配列
  • slice(start,length) start 番目から length 個の要素を含む部分配列
  • [nth]=val nth 番目の要素を val に設定
  • [start..end]=val start から end 番目の要素を配列 val に置換
  • [start,length]=val start から length 個の要素を配列 val で置換
  • + 内容を繋げた新しい配列
  • * 配列の内容を繰り返した新しい配列
  • - 配列に含まれる要素を除いた配列
  • & 両方の配列に含まれる要素からなる配列
  • | いずれかの配列に含まれる要素からなる配列
  • << 配列の末尾に追加
  • <=> 各要素を順に <=> で比較
  • == 等しいか否か
  • assoc 配列の配列を検索( 0 番目)
  • at nth 番目の要素
  • bsearch 二分探索
  • clear 要素をすべて削除
  • clone コピー(複製)
  • dup コピー(複製)
  • collect! 要素の評価
  • map! 要素の評価
  • compact nil 要素の除去
  • compact! nil 要素の除去
  • concat 配列を末尾に追加
  • delete 指定された要素の削除
  • delete_at 指定された位置にある要素の削除
  • delete_if 真となる要素を削除
  • reject! 真となる要素を削除
  • each 要素の評価
  • each_index 要素の添え字の評価
  • empty? 要素を持たないとき真
  • eql? 各要素のオブジェクトが等しければ真
  • fetch nth 番目の要素
  • fill 要素の値の設定
  • first 最初の要素
  • flatten 平滑化
  • flatten! 平滑化
  • include? 指定された要素を含んでいるか?
  • index 指定された要素の位置(最初)
  • insert 要素の挿入
  • join 要素を連結した文字列
  • last 末尾の要素
  • length 配列のサイズ
  • size 配列のサイズ
  • pop 末尾の要素を取り除く
  • push 末尾に要素を追加
  • rassoc 配列の配列を検索( 1 番目)
  • replace 配列の置き換え
  • reverse 逆順に並べ替え
  • reverse! 逆順に並べ替え
  • reverse_each 逆順に評価
  • rindex 指定された要素の位置(最後)
  • shift 先頭の要素を取り除く
  • slice!(start..end) 部分配列の削除
  • slice!(start,length) 部分配列の削除
  • sort ソート
  • sort! ソート
  • transpose 転置
  • uniq 重複要素の削除
  • uniq! 重複要素の削除
  • unshift 先頭に要素を追加
  • values_at 指定された添え字に対応する要素

クラスメソッド

メソッド

情報学部 菅沼ホーム 目次 索引