📍

【Processing】HashMapで最大/最小Valueを取得する方法

2022/06/19に公開

Processingでは、HashMapが用意されています。
HashMap - Reference / Processing.org

Keyは文字列で、Valueはそれぞれ文字列・整数・浮動小数点数ものがあります。
・文字列 -> StringDict
・整数 -> IntDict
・浮動小数点数 -> FloatDict

HashMapから最大/最小のValueのIndexを取得するには、maxIndex()/minIndex()があります。
公式リファレンスにはFloatDictのところに書いてありますが、IntDictでも使えます。
FloatDict - Reference / Processing.org

sample.pde
FloatDict inventory = new FloatDict();
inventory.set("coffee",108.6);
inventory.set("flour",5.8);
inventory.set("tea",8.2);

println(inventory);
// output -> FloatDict size=3 { "coffee": 108.6, "flour": 5.8, "tea": 8.2 }

println(inventory.maxIndex());
// output -> 0

println(inventory.minIndex());
// output -> 1

で、本題はIndexではなく、Value自体を取得したいのです。

maxValue()/minValue():最大/最小Valueを取得

なぜか公式リファレンスには載ってないのですが、最大/最小のValueを取得するにはmaxValue()/minValue()でできます。

sample.pde
FloatDict inventory = new FloatDict();
inventory.set("coffee",108.6);
inventory.set("flour",5.8);
inventory.set("tea",8.2);

println(inventory);
// output -> FloatDict size=3 { "coffee": 108.6, "flour": 5.8, "tea": 8.2 }

println(inventory.maxIndex());
// output -> 108.6

println(inventory.minIndex());
// output -> 5.8

配列ではもともとmax()/min()で値を取れますが、HashMapでも用意されていました。
なんで公式リファレンスに載ってないんでしょうね。

maxKey()/minKey():最大/最小ValueのKeyを取得

ついでに、最大/最小ValueのKeyを取得するにはmaxKey()/minKey()でできます。

sample.pde
FloatDict inventory = new FloatDict();
inventory.set("coffee",108.6);
inventory.set("flour",5.8);
inventory.set("tea",8.2);

println(inventory);
// output -> FloatDict size=3 { "coffee": 108.6, "flour": 5.8, "tea": 8.2 }

println(inventory.maxKey());
// output -> coffee

println(inventory.minKey());
// output -> flour

もちろんどちらも、IntDictでも使えます。
Processing便利ですね。

Discussion