簡體   English   中英

Scala過濾元組列表

[英]Scala filtering tuple list

問題:如何根據列表中的其他項進行過濾?

我有一個看起來像這樣的列表

List((2,2),(2,1),(3,1),....)

我想保留那些在獲得相同的第一個數字時獲得最大第二個數字的tupples

在輸出上就是這樣的東西

List((2,2),(3,1),...)

刪除(2,1),因為1(<2,2)<2

所以我需要根據列表中的其他對象進行過濾,如何做到這一點。

效率並不重要,因為該列表最多可獲得171項

將對象列表轉換為映射將在給定“密鑰”出現兩次時使用最后出現的條目。

並且元組在第一個元素上排序,然后在第二個元素上排序等。

所以:

List((2,2),(2,1),(3,1)).sorted.toMap
// = List((2,1),(2,2),(3,1)).toMap
// = Map((2,2), (3,1))

如有必要, .toList轉換回帶有.toList的列表

for ((x, y) <- lst if !lst.exists(t => x == t._1 && y < t._2)) yield (x, y)

但是如果你想要非二次復雜性:

lst.groupBy(_._1).map(_._2.max).toList.sorted

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM