Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Scala根据条件在两个列表之间合并_List_Scala - Fatal编程技术网

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()