scala - 如何从 List[A] 中删除作为映射值的序列 A 的元素(B->List[A])
问题描述
我有这个数据:
//H1 = house name
//H2 = price
//H3 = size
//H4 = location
//List(H1, H2, H3, H4)
val houses = List(
("House_A", 250, 120, "NYC"),
("House_B", 90, 100, "BR"),
("House_C", 300, 500, "BR"),
("House_D", 120, 90, "NYC"),
("House_E", 320, 250, "BR"),
("House_F", 290, 450, "SA"),
("House_G", 290, 450, "NYC"),
("House_F", 450, 100, "FR"),
("House_H", 210, 92, "SA"),
("House_I", 240, 100, "FR"),
("House_J", 395, 80, "FR"),
("House_K", 140, 125, "NYC"),
("House_L", 900, 250, "BR"),
("House_M", 300, 110, "FR")
)
并希望以这种格式访问“列出价格(H1)> 100 且超过 1 所房子的地方” :
List((H4, List(H1,H2,H3)))
问题
我的问题是我不知道如何从应该是 List(H1,H2,H3) 的列表中删除 H4(place)。
我试过的
这和我得到的一样好
houses
.filter(_._2 > 100)
.groupBy(_._4)
.filter(a => a._2.length > 1) // this is the map I talk about in the title: Map(H4 -> List(H1, H2, H3, H4))
.toList
List(
(BR,List((House_C,300,500,BR), (House_E,320,250,BR), (House_L,900,250,BR))),
(NYC,List((House_A,250,120,NYC), (House_D,120,90,NYC), (House_G,290,450,NYC), (House_K,140,125,NYC))),
(FR,List((House_F,450,100,FR), (House_I,240,100,FR), (House_J,395,80,FR), (House_M,300,110,FR))),
(SA,List((House_F,290,450,SA), (House_H,210,92,SA))))
解决方案
你离得太近了!
您只需要map
在内部组中删除不需要的列。而且,因为您需要为每个内部组执行此操作,所以您想要map
所有的Map。
houses
.filter(_._2 > 100)
.groupBy(_._4)
.filter(a => a._2.length > 1)
.map {
case (location, group) =>
location -> group.map {
case (house, price, size, _) =>
(house, price, size)
}
}.toList
奖励:为了使代码更高效,你可以。
- 合并
filter
&map
成collect
. - 您不需要列表的所有大小,只需检查它是否大于 1。
(此仅适用于 Scala2.13 +
)
-
houses
.filter(_._2 > 100)
.groupBy(_._4)
.collect {
case (location, group) if (group.sizeIs > 1) =>
location -> group.map {
case (house, price, size, _) =>
(house, price, size)
}
}.toList
推荐阅读
- kubernetes - Kubernetes 卷挂载权限对于 Secret 不正确
- vba - 修复 PPT 图表中的轴值
- python - 查找numpy中的所有间隔
- javascript - 警报事件侦听器取决于所选的选项 JavaScript
- javascript - JWT 使令牌无效
- swift - 如果我们单击 AddCommentsButton,则必须启用 AddCommentsTextView。如何在 swift iOS 中实现?
- android - 如何使用颤振制作安卓棋盘游戏
- azure - 是否可以在 Azure DevOps 上升级到性能更高的 Microsoft 托管构建代理?
- python - 我需要使用 json 将嵌套的 python 字典写入文本文件,该文本文件将被读取为 c++ 字典(使用 OpenFOAM)
- jquery - Owl-carousel 和 Bootstrap 模态