最大要素に等しいリスト内のすべての要素を検索する簡単な方法はありますか? 。

List v = [ 1,2,3,4,5,5 ] def max = v.max() def maxs = v.findAll { it == max } 

ありがとうございます!

コメント

  • インラインメソッドを使用します: v.findAll { it == v.max() }
  • @ArturoHerreroは、リスト内の各要素に対してmax()メソッドを実行しますか?または、コンパイラはそれを最適化して最大値を1回だけ見つけてから、各要素と比較しますか?

回答

簡単な例でどのように実行したかは、まさに私が実行する方法です。より複雑なオブジェクトを処理する場合は、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} 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です