scala - 列表到 Scala 中的列表列表
问题描述
我正在学习 Scala,这种不变性的想法仍然令人困惑,所以如果问题听起来很明显,请指出我正确的方向
如果我有一个带有 id、groupId 和 name 的对象列表
List(
Obj(1, 1, "1.1")
Obj(2, 1, "1.2")
Obj(3, 1, "1.3")
Obj(1, 2, "2.1")
Obj(2, 2, "2.2")
Obj(1, 3, "3.1")
在 Scala 中创建这样的东西的正确方法是什么。(项目不一定按groupId排序)
List(
List(
Obj(1, 1, "1.1")
Obj(2, 1, "1.2")
Obj(3, 1, "1.3")
), List(
Obj(1, 2, "2.1")
Obj(2, 2, "2.2")
), List(
Obj(1, 3, "3.1")
)
)
我应该使用for
还是map
有其他方法?
解决方案
Scala 不可变集合提供了更高阶的函数,例如map
, foldLeft
,groupBy
等,它们生成一个新的转换集合而不改变旧集合。例如,考虑groupBy
跟随values
objs // List[Obj]
.groupBy(_.y) // Map[Int,List[Obj]]
.values // Iterable[List[Obj]]
给定
case class Obj(x: Int, y: Int, s: String)
val objs =
List(
Obj(1, 1, "1.1"),
Obj(2, 1, "1.2"),
Obj(3, 1, "1.3"),
Obj(1, 2, "2.1"),
Obj(2, 2, "2.2"),
Obj(1, 3, "3.1"),
)
哪个输出
Iterable(
List(Obj(1,1,1.1), Obj(2,1,1.2), Obj(3,1,1.3)),
List(Obj(1,2,2.1), Obj(2,2,2.2)),
List(Obj(1,3,3.1))
)
考虑通过List
交互式练习并在Scala gitter 频道上询问实时初学者友好指导。
推荐阅读
- html - PDF分页符背景颜色
- ios - 如何在 swift 框架中使用 cocoapods
- reactjs - Electron+React 深度链接
- tinymce - 在 TinyMCE 中,上传图像的名称会根据您使用拖放还是文件上传而有所不同。我们可以保留原来的名字吗?
- android - 如何在颤振应用程序中旋转文本?
- .net-core - Outlook Redemption 是否支持 .Net 核心?
- perl - 如何删除逗号分隔值中的空列?
- arrays - 去除雪花中两个数组的OVERLAP
- java - 用完整的树替换引用的 href
- sql - 如何将 SQL 结果放入 VBA 中的变量中