2017-01-06 3 views
0

スカラでは、タプルのリストList[(String, String)]があります。だから、このリストから、リスト内にそれぞれのユニークなタプルが何回現れるかを知りたい。大きなリスト内のスカラカウント数

これを行う1つの方法は、groupby{ x => x}を適用して長さを見つけることです。しかし、私のデータはかなり大きく設定されており、時間がかかります。

これを実行する方法はありますか?

+0

@ evan058、それは本当に重複ですか?ここでは、OPは他の質問とは異なり、パフォーマンスに焦点を当てています。 – Akavall

+0

はい、なぜ私は簡単な方法をグループ化するだけだろうと述べた。しかし、私はより良いパフォーマンスのアプローチが必要でした。 – Sidhant

+0

@Sidhantあなたは '.groupBy(identity)'を特に試みましたか?私は、他の回答がパフォーマンスを考慮に入れていると思った。 –

答えて

2

Mapを使用して手動でカウントします。あなたのコレクション/リストを繰り返し処理してください。反復中にcountマップを作成します。 countマップ内のキーは、元のコレクション/リストのユニークな項目です。値はキーの出現回数です。反復中に処理されているアイテムがcountコレクション内にある場合は、その値を1増やします。それ以外の場合は、countマップに値1を追加します。あなたはgetOrElseを使用することができます。

count(current_item) = count.getOrElse(current_item, 0) + 1; 

これは、より高速な長さチェックが続くgroupby、より動作するはずです。必要なメモリも少なくて済みます。

その他の提案は、discussionもご確認ください。

+0

'groupBy'にはマップがフードの下にあるので、私もそうだと思います。リストを格納することは余分な作業を必要としません。しかし、違いがどれほど大きいかを知ることは素晴らしいことです。 – Akavall

+1

[このケースでは](http://stackoverflow.com/a/12105418/2661491)このアプローチはほぼ同じでしたが、 '(String、String)'データがどのように変化するかはわかりません。 –

関連する問題