Laszloでグラフを描こう 第2回
グラフの軸の範囲(最大値と最小値)を決めるために、データをソートするプログラムをつくります。
いろいろなやり方をためしてみましたが、結局一番簡単と思われる方法にたどり着きました。ここまで本と長かったです(w。
具体的な戦略は次のとおりです。
lまず、グラフの軸となる値をXMLから取り出します。Laszloでは、XMLデータはdatasetに格納されているので、次のようにして取り出します。まず、viewなどのdatapathに取り出したいデータのdatasetを指定します。次に、datapath.xpathQuery(xpath)として、該当データをとりだします。
取り出したいデータが複数ある場合は、LzDataelEment形の配列で返されます。くわしくは、datapointerクラスのxpathQueryの項を参考にしてくだい。
次に、これらのデータをArrayクラスのsort関数を使ってソートします。ソートはデータを文字列とみなして行われるため、数値としてソートしたい場合には、コンパレータを定義する必要があります。
例)
文字列をソートする場合
var dataArray = this.datapath.xpathQuery(xpath);
dataArray.sort();
数値をソートする場合
var dataArray = this.datapath.xpathQuery(xpath);
dataArray.sort(ascendComparatorNum);
ascendComparatorNumがコンパレータです。以下にascendComparatorNumの中身の例を示します。
function ascendComparatorNum( a, b ) {
aNum = Number( parseFloat(a) );
bNum = Number( parseFloat(b) );
var r = ( aNum == bNum ) ? 0 : ( aNum > bNum ) ? 1 : -1;
return r;
}
最後に、全体のプログラムを把握してもらうために、開発中のコードを載せておきます。ダウンロードしてご覧ください。参考になれば幸いです。
このコードはAmazonの商品情報を検索して、ソートするプログラム(開発中)です。きちんとしたコードができましたら、改めて掲載したいとおもいます。