List Scala根据条件在两个列表之间合并
所以我有两个List Scala根据条件在两个列表之间合并,list,scala,List,Scala,所以我有两个列表: 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",
列表
:
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)
因此,我需要一个新的列表
,其中所有名称都等于“Dan”
,且值为true
,因此在我的示例中,它应该返回带有1个元素的列表
:
"Dan", 12.2
试试这个:
names
.zip(list2.map(_._2))
.filter(_._2)
.map(_._1)
.filter(_._2 > 0)
zip
将名称列表与第二个列表中的真/假值相结合(我假设您的list2
的排序方式与names
的排序方式相同,如示例所示,因此我们可以在list2
中使用map
删除名称以仅检索布尔值)。这将产生如下列表:
ListBuffer(((Nat,11.0),false),((Dan,12.2),true),((Jeen,0.0),false),((David,55.0),false))
现在我们过滤真/假值(。\u 2
),得到如下列表:
ListBuffer(((Dan,12.2),true))
现在,我们不再需要布尔值,因此将其删除,通过map(u.\u 1)
为我们留下一个名称-值元组列表,结果是:
ListBuffer((Dan,12.2))
最后,我们使用.filter(u.\u 2>0)
对值为.0的地方进行过滤,在您的示例中,这仍然会给我们留下一个具有相同内容的列表(尝试将Jeen
更改为true
,以查看最后一个过滤器的运行情况):
ListBuffer((Dan,12.2))
C#回答:name.Where(x=>x.Item2>0)。加入(list2.Where(y=>y.Item2),x=>x.Item1,y=>y.Item1,(x,y)=>x.Item1=>Dan)
或类似的东西,names.Concat(list.Select(y=>new{y.name,value=Convert.ToDouble(y.condition)}).GroupBy(x=>x.name)。其中(x=>x.Key==“Dan”&&x.All(y=>y>0)).First()代码>