有幾個庫,如Spark和其他Scala擴展具有「groupWith」功能。此函數允許您將元素與集合的其餘部分進行比較,然後使用一個或多個謂詞對其進行分組。在Scala中似乎沒有任何本地功能,但它們具有sortWith功能,其行爲相似,但只對項目進行排序而不是對它們進行分組。如果解釋不充分這裏應該顯示一個小代碼示例我想要做的事:是否有像sortWith函數一樣的本地分組函數?
val list = List(1,2,3,4,5,5)
val groupedList = list.groupWith{ (e,c) =>
e == c
}
這是一個非常簡單的例子,我想要做更復雜的比較,如
e + 1 == c
所以問題是,是否有任何原生Scala函數可以做到這一點?任何建議或解決方法?
更新: 從簡單的例子給了它似乎它不完全清楚我想要做的,這裏有一個更好的例子: 說我有一個案例類和這些對象的列表:
case class Item(num: Int, color: String)
val list = List(new Item(13, "red"), new Item(14,"red"), new Item(15, "blue"), new Item(16, "red"))
list.groupWith{ (e,c) =>
(e.num -1 == c.num || e.num + 1 == c.num) && e.color == c.color
}
,應返回是這樣的:
res8: List[List[Item]] = List(List(Item(13,red), Item(14,red)), List(Item(15,blue)), List(Item(16,red)))
CA你告訴我們,那些不熟悉瓦特/星火groupWith,你的結果在'groupedList'這兩種情況? – Teliatko
我錯過了'groupWith'的語義。 – Teliatko
你是否希望按照順序對(即(1,3,2,3)和(e,e + 1))進行組合,如果它返回(1,2),(2,3),(2, 3)還是僅僅(2,3)? –