回答
def flatten(ls: List[Any]): List[Any] = ls flatMap {
case ms: List[_] => flatten(ms)
case e => List(e)
} //> flatten: (ls: List[Any])List[Any]
flatten(List(1, List(2,3), 4, List(5,6,7))) //> res0: List[Any] = List(1, 2, 3, 4, 5, 6, 7)
就是這樣,謝謝。 –
你應該使用的Either[Int, List[Int]]
列表:
val xs: List[Either[Int, List[Int]]] = List(Left(1), Left(2), Right(List(1, 2, 3)), Left(7))
val xs1 = xs.flatMap {
case Left(i) => List(i)
case Right(is) => is
}
在另一方面,你也許可以通過在首位不產生這樣的異構列表來解決這個問題。
可選:
隨着Scalaz的\/
,更換Either[Int, List[Int]]
與Int \/ List[Int]
。
val xs: List[Int \/ List[Int]] = ...
val xs1 = xs.map {
case -\/(i) => ...
case \/-(is) => ...
}
爲什麼地獄沒有評論? –
Downvotes不需要評論。我的是Scalaz需要改變輸入列表的類型,我們有兩個問題:( –
斯卡拉茲位是可選的!) –
的一般解如果你必須處理Any
,您可以通過模式在運行時匹配這樣做:
def flatten(l: List[_]): List[Any] = l flatMap {
case m: List[_] => flatten(m)
case e => List(e)
}
但作爲@Erik說,這最好始終跟蹤類型信息,以便確保您正確處理所有情況。對於Erik解決方案的更一般版本,您可以使用無形:https://github.com/milessabin/shapeless/blob/master/examples/src/main/scala/shapeless/examples/flatten.scala(該示例使用元組,但是與HList
s的工作方式相同)
- 1. 如何使用NULL值壓扁列表?
- 2. AutoMapper:如何壓扁
- 3. 表列被scollbars壓扁
- 4. 壓扁元組列表
- 5. 如何壓扁Linq-To-Sql表映射?
- 6. 如何從壓扁jsonlite
- 7. 陣列半壓扁
- 8. 取消壓扁表
- 9. 如何使用python壓扁元組中的項目列表?
- 10. JQuery Datatables - 空表列標題被壓扁
- 11. 使用Linq和lambda壓扁列表
- 12. 的Python:遞歸壓扁列表
- 13. 壓扁變長數組列表
- 14. Json列表不能正常壓扁
- 15. 壓扁
- 16. Python列表理解:壓扁列表的列表返回的5S
- 17. 如何在python中壓扁元組
- 18. 如何在PHP中壓扁數組?
- 19. 如何通過DataFrame壓扁Pandas group?
- 20. 如何斯卡拉壓扁turples
- 21. 如何在eclipse中壓扁包?
- 22. 如何在Python中壓扁XML文件
- 23. 如何在jQuery中壓扁數組?
- 24. 如何使用CSS壓扁複選框?
- 25. 如何在紅寶石中壓扁
- 26. 如何用git rebase壓扁-i
- 27. 翻譯的SQL壓扁表
- 28. SQL Server壓扁層次表
- 29. 如何「扁平」列表變量?
- 30. XSLT壓扁XML
如果您可以避免結束使用List [Any]首先你的生活會好很多。 –
首先將它轉換爲一個理智的數據類型,然後使用常規的'flatten'方法? –