2024
11
26
2010
09
29
Google Visualization の dataTable の並べ替え
前々回の「Google Visualization の Query で並べ替えを指定する。」では、データソースである Google spreadsheets にクエリを投げるときに、返ってくるレスポンスの dataTable オブジェクトの並び順を指定しました。今回はクエリで並び順を指定するのではなく、dataTable オブジェクトのメソッドを利用して並べ替えを行う方法について説明しましょう。
Google Visualization の dataTable には、行を並べ替えるメソッドが用意されています。行を並べ替えるメソッドには、実際にデータの並び順を並べ替えてしまう sort メソッドと、並べ替えた場合の行番号の順番を返す getSortedRows メソッドの2つがあります。
2つのメソッドとも同じ種類の引数を用いて、並べ替えの方法を指定します。 引数には、4種類あります。並べ方に応じて使い分けます。
1.数(number)
数(number)を指定した場合には、その数のカラムを昇順に並べ替えます。getSortedRows メソッドの場合には、並べ替え場合の行番号の配列を返し、実際の dataTable の行の順番が変更されるわけではありません。sort メソッドの場合は、実際に順番が並べ替えられますが、戻り値はありません。これらについては、以下同じです。なお、1番目のカラムの番号は「0」です。
(例)
0,B
1,C
2,A
上記のようなデータテーブル data を想定します。
2番目のカラムを指定して、その行番号の配列を取得する場合は、次のように記述します。
rowInds=data.getSortedRows(1);
[2,0,1]という配列が取得できます。
実際に並べ替える場合には、次のように記述します。
data.sort(1)
この場合、データテーブル data の行の並び順は、次のとおり変更されます。
2,A
0,B
1,C
2.並び順オブジェクト
「{coulumn:1, desc:true}」のようなオブジェクトで指定します。column プロパティの値は、何番目のカラムで並べ替えるかを指定します。1番目は「0」です。
desc プロパティは、降順とするかどうかです。降順の場合に true を指定します。このプロパティを省略した場合には、昇順とみなします。
(上記と同じ data の例)
rowInds=data.getSortedRows({coulumn:1, desc:true});
//[1,0,2]
data.sort({coulumn:1, desc:true});
1,C
0,B
2,A
3.数の配列
[3,2,1]のような数の配列を指定します。まず1番目のカラム、2番目、3番目のカラムという優先順位で並べ替えます。1番目のカラムが同じ値の場合には2番目のカラムが比較され、これも同じ場合には3番目のカラムが比較されます。
(例)
0,B,200
1,C,200
2,A,200
3,C,100
4,A,100
上記のようなデータテーブル data を想定します。
rowInds=data.getSortedRows([1, 2]);
//[4,2,0,3,1]
data.sort([1, 2]);
4,A,100
2,A,200
0,B,200
3,C,100
1,C,200
4.並び順オブジェクトの配列
「[{coulumn:1}, {coulumn:2, desc:true}]」のようなオブジェクトの配列で指定します。
(上記と同じ data の例)
rowInds=data.getSortedRows([{coulumn:1}, {coulumn:2, desc:true}]);
//[2,4,0,1,3]
data.sort([{coulumn:1}, {coulumn:2, desc:true}]);
2,A,200
4,A,100
0,B,200
1,C,200
3,C,100
■ 行番号の配列の処理方法
取得した行番号の配列をループ処理することで、その順番でその行のデータを処理することができます。例えば、各行の3番目のカラムの値を取得する場合は、次のように getValue メソッドで取得できます。
for (var i = 0; i < rowInds.length; i++) {
var v = data.getValue(rowInds[i], 2);
}
dataTable のメソッドについてもっと知りたい方は、「Google Visualization API Reference の dataTable Object」をご覧下さい。英文ですが。。
2010/09/29 (Wed.) Comment(0) Google Visualization
Comments