2011-02-09 6 views
3

クエリ:私はグルーヴィー[Grailsの/ Groovyの]マップエントリの最小値

["Java":1, "Groovy":4, "JavaScript":2].min{it.value} 
のマップから最小値を取得するために

これまでのところ、私が発見した次のコードのGrailsでマップから最小値を引くことができる方法

が、それは私がコード

def map = ["Java":1, "Groovy":4, "JavaScript":2] 
println map.min{it.value} 
assert map.min{it.value}==1 

未満の一片以下試してみましたGrailsの

で仕事をscroll down toパソコンへ転送あなたがマップから最小値をしたい場合は事前にKSは

答えて

3

、あなたが行うことができます:

def map = ["Java":1, "Groovy":4, "JavaScript":2] 
println map.values().min() 
assert map.values().min() == 1 

編集

closure accepting version of map.minは1.7.6以降Groovyでてきました。また

、とGrails (v1.3.6以降)は、Groovy 1.7.5を使用します。

+0

groovyコード、[code] map.min {it.value} [/ code]がGrailsで動作しない理由を少し説明してもらえますか?前もって感謝します。 – Rehman

+0

@Rehmanこの情報を追加するために私の答えを更新しました:-) –

0

min()引数のクロージャによって返される最小値を返しません。クロージャが最小値を返すコレクションの要素を返します。

map.min {it.value}は有効な呼び出しですが、値ではありません。それはMapEntryであり、keyおよびvalueの特性を有する。だからmap.min{it.value}.valueとなります。

+0

返信ありがとうございます。 'groovy.lang.MissingMethodException:メソッドのシグネチャがありません:java.util.LinkedHashMap.min()は引数の型に適用できます:(' .Ive also tried 'map .min {it.value} .value'。任意の提案? – Rehman

+1

私はそれがすべてGrailsのバージョンに依存していると思います。現在は1.3.6を使用しています。そして、そこにgroovyのバージョンが1.7.5であることが分かりました。 Groovyバージョン1.7.6を使用する – Rehman