title: array_to_dataset
author: KUMAGAI Hidetake
mailto: ggb03124@nifty.ne.jp

1. array_to_dataset メソッド

: array_to_dataset ( array , *options )

配列の配列、ハッシュのハッシュなどを ClientDataSet にして返す。

次のような４つのタイプに対応します。

array_of_array 配列の配列
array_of_hash  ハッシュの配列
hash_of_array  配列のハッシュ
hash_of_hash   ハッシュのハッシュ

1.1. array_of_array 配列の配列

配列の配列では順番は変りません。レコードは配列の順番通りに並びます。
フィールド名は names オプションで指定しない限り "field_0" というような平凡な名前になります。

--ruby
require "array_to_dataset"

array_of_array = [
    [ 101 , 103 , 102 ],
    [ 301 , 303 , 302 ],
    [ 201 , 203 , 1111 ],
]
array_to_dataset(array_of_array).display

  #=>        field_0        field_1        field_2
  #=> -------------- -------------- --------------
  #=>            101            103            102
  #=>            301            303            302
  #=>            201            203           1111
--

1.1. array_of_hash ハッシュの配列

配列の内部にハッシュが入っている場合にはハッシュのキーが項目名となり、項目名をソートした順番で並びます。項目の順番は keys オプションで指定できます。

--ruby
require "array_to_dataset"

array_of_hash = [
    {1 => 101 , 3 => 103 , 2 => 102 },
    {1 => 301 , 3 => 303 , 2 => 302 },
    {1 => 201 , 3 => 203 , 2 => 2222 },
]
array_to_dataset(array_of_hash ).display

  #=>              1              2              3
  #=> -------------- -------------- --------------
  #=>            101            102            103
  #=>            301            302            303
  #=>            201           2222            203
--

1.1. hash_of_array 配列のハッシュ

外側が配列でなくハッシュの場合には、キーの順番でレコードがソートされます。キーはデータセットには含まれません。
それ以外の点は array_of_array と同じです。

--ruby
require "array_to_dataset"

hash_of_array = {
    1 => [ 101 , 103 , 102 ],
    3 => [ 301 , 303 , 302 ],
    2 => [ 201 , 203 , 3333 ],
}
array_to_dataset( hash_of_array).display

  #=>        field_0        field_1        field_2
  #=> -------------- -------------- --------------
  #=>            101            103            102
  #=>            201            203           3333
  #=>            301            303            302
--

1.1. hash_of_hash ハッシュのハッシュ

外側が配列でなくハッシュの場合には、キーの順番でレコードがソートされます。キーはデータセットには含まれません。
それ以外の点は array_of_hash と同じです。

--ruby
require "array_to_dataset"

hash_of_hash = {
    1 => {1 => 101 , 3 => 103 , 2 => 102 },
    3 => {1 => 301 , 3 => 303 , 2 => 302 },
    2 => {1 => 201 , 3 => 203 , 2 => 4444 },
}
array_to_dataset( hash_of_hash ).display

  #=>              1              2              3
  #=> -------------- -------------- --------------
  #=>            101            102            103
  #=>            201           4444            203
  #=>            301            302            303
--

1.1. オプション

: keys => Array

内部がハッシュの場合に、ハッシュのキーの配列を指定する。項目の順番を指定するために使う。

--ruby
require "array_to_dataset"

hash_of_hash = {
    1 => {1 => 101 , 3 => 103 , 2 => 102 },
    3 => {1 => 301 , 3 => 303 , 2 => 302 },
    2 => {1 => 201 , 3 => 203 , 2 => 4444 },
}
array_to_dataset( hash_of_hash , {:keys=>[3,2,1]}).display

  #=>              3              2              1
  #=> -------------- -------------- --------------
  #=>            103            102            101
  #=>            203           4444            201
  #=>            303            302            301
--

:labels => Array

　表示ラベルの配列。

--ruby
require "array_to_dataset"

array_of_array = [
    [ 101 , 103 , 102 ],
    [ 301 , 303 , 302 ],
    [ 201 , 203 , 1111 ],
]
array_to_dataset(array_of_array,{:labels=>["壱","参","弐"]}).display

  #=>             壱             参             弐
  #=> -------------- -------------- --------------
  #=>            101            103            102
  #=>            301            303            302
  #=>            201            203           1111
--

:names => Array

　データセットの項目名の配列。日本語の項目名は保証しない。あまり使うことはないだろう。
　＊　:labels のほうが自由度が高い。
　＊　内部がハッシュの場合に、キーが項目名賭して不適当な場合に有用か？

:types => Array

　項目の型の配列。指定しなければ自動的に適当な項目の型がセットされます。

:sizes => Array

　各項目の最低の長さの配列を指定する。文字列以外では意味がないでしょう。
　各項目の長さは、（１）データの内容を調べた最大のデータ長さ、（２） :sizes で指定した長さ、（３） :size_mini で指定した長さのうちもっとも大きいものになります。
　デフォルトの長さは１４バイト（:size_mini のデフォルトの値）しかありません。すべて空の状態であれば、１４バイトになってしまいます。

:size_mini => Integer

　文字列項目の最少の長さを指定する。

