所以我有2 Lists
:
val names = ListBuffer[(String, Double)]
names += ("Nat", 11.0)
names += ("Dan", 12.2)
names += ("Jeen", 0)
names += ("David", 55.0)
val list2 = ListBuffer[(String, Boolean)]
list2 += ("Nat", false)
list2 += ("Dan", true)
list2 += ("Jeen", false)
list2 += ("David", false)
所以我希望新的List
所有名称等于"Dan"
,其值为> 0,值为true
所以在我的示例中,这应该返回List
1个元素:
"Dan", 12.2
答案 0 :(得分:2)
试试这个:
names
.zip(list2.map(_._2))
.filter(_._2)
.map(_._1)
.filter(_._2 > 0)
zip
将名称列表与第二个列表中的true / false值组合在一起(我假设您的list2
的排序方式与names
相同,如示例所示因此,我们可以使用list2
删除map
中的名称以仅检索布尔值。这会得到一个List,如:
ListBuffer(((Nat,11.0),false), ((Dan,12.2),true), ((Jeen,0.0),false), ((David,55.0),false))
现在我们过滤真/假值(_._2
),得到如下列表:
ListBuffer(((Dan,12.2),true))
现在我们不再需要布尔值了,所以请放弃它,通过map(_._1)
给我们留下一个名值元组列表,结果是:
ListBuffer((Dan,12.2))
然后我们最后使用> 0
过滤值为.filter(_._2 > 0)
的位置,在您的示例中仍然为我们留下了具有相同内容的列表(尝试将Jeen
更改为true
看到最后一个过滤器在运行中):
ListBuffer((Dan,12.2))