List 如何在scala中匹配两个列表中的元素?
我有两份清单如下:List 如何在scala中匹配两个列表中的元素?,list,scala,collections,List,Scala,Collections,我有两份清单如下: val a = List((HarddiskVolume1,31,1), (C:,46552070,433057), (E:,5435,1728), (_Total,46557536,434786)) val b = List(C:, E:) 我希望输出如下: o/p (C:,46552070433057),(E:,54351728) 我如何使用scala获得所需的输出???使用收集像这样 val a = List(("HarddiskVolume1",31,1), ("
val a = List((HarddiskVolume1,31,1), (C:,46552070,433057), (E:,5435,1728), (_Total,46557536,434786))
val b = List(C:, E:)
我希望输出如下:
o/p
(C:,46552070433057),(E:,54351728)
我如何使用scala获得所需的输出???使用
收集
像这样
val a = List(("HarddiskVolume1",31,1), ("C:",46552070,433057), ("E:",5435,1728), ("_Total",46557536,434786))
val b = List("C:", "E:")
a.filter(x => b.contains(x._1)) // if b is large, consider making it a set.
// res0: List[(String, Int, Int)] = List((C:,46552070,433057), (E:,5435,1728))
val keys = b.toSet
a collect { case z@(x,_,_) if keys(x) => z }
更新
其他类似方法包括
for ( z <- a if keys(z._1) ) yield z
a collect { case z if keys(z._1) => z }
( a partition ( z => keys(z._1) ) )._1
(z)的
(一个分区(z=>keys(z._1)))。_1
像这样使用收集
val keys = b.toSet
a collect { case z@(x,_,_) if keys(x) => z }
更新
其他类似方法包括
for ( z <- a if keys(z._1) ) yield z
a collect { case z if keys(z._1) => z }
( a partition ( z => keys(z._1) ) )._1
(z)的
(一个分区(z=>keys(z._1)))。_1
如果数据作为列表中的列表存在,则回答@Yogesh:
val aa =List(List(("HarddiskVolume1",31,1), ("C:",46552070,433057), ("E:",5435,1728), ("_Total",46557536,434786)),
List(("HarddiskVolume1",31,1), ("C:",46552070,433057), ("E:",5435,1728), ("_Total",46557536,434786))
)
val b = List("C:", "E:")
aa.map(l => l.filter(x => b.exists(_== x._1)))
与Shyamendra类似,但在列表上使用exists运算符。如果数据作为列表中的列表存在,则应答@Yogesh:
val aa =List(List(("HarddiskVolume1",31,1), ("C:",46552070,433057), ("E:",5435,1728), ("_Total",46557536,434786)),
List(("HarddiskVolume1",31,1), ("C:",46552070,433057), ("E:",5435,1728), ("_Total",46557536,434786))
)
val b = List("C:", "E:")
aa.map(l => l.filter(x => b.exists(_== x._1)))
与Shyamendra类似,但在列表上使用exists运算符。Hi如果我的列表为val a=list(list((硬磁盘卷1,31,1),(C:,46552070433057),(E:,54351728),(u Total,46557536434786)),list((硬磁盘卷1,31,1),(C:,46552070430557),(E:,54351728),(u Total,46557536434786)))那么过滤器应该如何添加呢?嗨,我有同样的问题,如果我的列表为val a=list(list((硬盘卷1,31,1),(C:,46552070433057),(E:,54351728),(u Total,46557536434786)),list((硬盘卷1,31,1),(C:,4655207043057),(E:,54351728),(u Total,46557536434786)),那么过滤器应该如何添加呢?