私は次の地図を持っています:
def map = [];
map.add([ item: "Shampoo", count: 5 ])
map.add([ item: "Soap", count: 3 ])
count
マップ内のすべてのプロパティの合計を取得したいと思います。LINQを使用するC#では、次のようになります。
map.Sum(x => x.count)
Groovyで同じことをするにはどうすればよいですか?
私は次の地図を持っています:
def map = [];
map.add([ item: "Shampoo", count: 5 ])
map.add([ item: "Soap", count: 3 ])
count
マップ内のすべてのプロパティの合計を取得したいと思います。LINQを使用するC#では、次のようになります。
map.Sum(x => x.count)
Groovyで同じことをするにはどうすればよいですか?
あなたがそのようなリストを持っていると仮定します:
List list = [ [item: "foo", count: 5],
[item: "bar", count: 3] ]
次に、それを行うには複数の方法があります。最も読みやすいのはおそらく
int a = list.count.sum()
または、リスト全体で合計のクロージャー形式を使用することもできます
int b = list.sum { it.count }
または、注入などのより複雑なルートを使用することもできます
int c = list.count.inject { tot, ele -> tot + ele } // Groovy 2.0
// c = list.count.inject( 0 ) { tot, ele -> tot + ele } // Groovy < 2.0
これらはすべて同じ結果になります。
assert ( a == b ) && ( b == c ) && ( c == 8 )
私は最初のものを使用します。
演算子を使用しcollect
ます。groovyshで次のコードを確認しました。
list1 = []
total = 0
list1[0] = [item: "foo", count: 5]
list1[1] = [item: "bar", count: 3]
list1.collect{ total += it.count }
println "total = ${total}"
まず第一に、あなたはあなたの例でマップとリストの構文を混乱させています。とにかく、Groovyはすべてのコレクションに.sum(closure)メソッドを挿入します。
例:
[[a:1,b:2], [a:5,b:4]].sum { it.a }
===> 6