我有一組元組:
Set(("autumn",0), ("winter",2), ("summer",0), ("winter",0), ("spring",0))
如何洗掉作為鍵重復且值為 0 的元組?
結果:
Set(("autumn",0), ("winter",2), ("summer",0), ("spring",0))
uj5u.com熱心網友回復:
按元組的第一個元素分組,然后對值進行排序并取第一個元素:
val mySet = Set(("autumn", 0), ("winter", 2), ("summer", 0), ("winter", 0), ("spring", 0))
val result = mySet.groupBy(_._1)
.mapValues(_.toList.sortBy(-_._2).head)
.values.toSet
//scala.collection.immutable.Set[(String, Int)] = Set((winter,2), (autumn,0), (spring,0), (summer,0))
uj5u.com熱心網友回復:
在這種特殊情況下,您可以按元組的第一個元素進行分組,并為第二個元素選擇最大值:
val values = Set(("autumn",0), ("winter",2), ("summer",0), ("winter",0), ("spring",0))
val result = values
.groupMap(_._1)(_._2) // groups by first element and maps group values to second
.map(t => (t._1, t._2.max))
或僅重用原始值groupBy:
val result = values
.groupBy(_._1)
.map(_._2.maxBy(_._2))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393186.html
