最大要素に等しいリスト内のすべての要素を検索する簡単な方法はありますか? 。
List v = [ 1,2,3,4,5,5 ] def max = v.max() def maxs = v.findAll { it == max }
ありがとうございます!
コメント
回答
簡単な例でどのように実行したかは、まさに私が実行する方法です。より複雑なオブジェクトを処理する場合は、groupBy
を使用できます。
List v = [ 1,2,3,4,5,5 ] def max = v.max() def results = v.groupBy {it}.get(max) assert [5,5] == results
回答
コードでは、リストを2回(メソッド
およびメソッドList.findAll
に対して1回)。もちろん、リストが小さい場合はこれで問題ありません。リストが非常に大きい場合は、これで問題ありません。 、1回だけ実行する必要があります。
リストにプリミティブのみが含まれている場合、リストを実行して両方の変数を更新するには、この最大値と最大値の数を1つの変数に格納するだけで十分です。 :
def list = [1,2,3,4,5,5] def max = null def count = 0 for (int i: list) { if (max == null || i > max) { max = i count = 1 } else if (i == max) { count++ } } println max // 5 println count // 2
もちろん、上記のコードには自分のコードよりも多くの行がありますが、非常に大きなリストの場合は高速になるはずです。
回答wer
この方法が最も便利だと思います:
def v = [ 1,2,3,4,5,5 ] v = v.groupBy { it }.sort { 0 - it.key }.values() assert [[5,5], [4], [3], [2], [1]] == v
回答
Groovyが、
than
sess.find{it==valuetobefound}
v.findAll { it == v.max() }