Scala – 从List中获取带有扭曲的唯一值
发布时间:2020-12-16 18:27:03 所属栏目:安全 来源:网络整理
导读:我有一个这样的列表: val l= List(("Agent","PASS"),("Agent","FAIL"),("Agent 1",("Agent 2","PASS") ) 我需要得到一个这样的列表: val filteredList= List(("Agent","PASS") ) 发生了什么? ("Agent","FAIL") 变 ("Agent","FAIL") (因为如果至少有一次失
我有一个这样的列表:
val l= List(("Agent","PASS"),("Agent","FAIL"),("Agent 1",("Agent 2","PASS") ) 我需要得到一个这样的列表: val filteredList= List(("Agent","PASS") ) 发生了什么? ("Agent","FAIL") 变 ("Agent","FAIL") (因为如果至少有一次失败,我需要保留该条目) 代理1和代理2的条目保持不变,因为每个条目只有一个条目. 我找到的最接近的答案是 我希望这个问题很清楚,如果没有,我可以给你一个更好的例子. 谢谢 解决方法
这是你想要的吗?
jem@Respect:~$scala Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM,Java 1.6.0_21). Type in expressions to have them evaluated. Type :help for more information. scala> val l= List(("Agent","PASS") ) l: List[(java.lang.String,java.lang.String)] = List((Agent,PASS),(Agent,FAIL),(Agent 1,(Agent 2,PASS)) scala> l.foldLeft(Map.empty[String,String]){(map,next) => | val (agent,result) = next | if ("FAIL" == result) map.updated(agent,result) | else { | val maybeExistingResult = map.get(agent) | if (maybeExistingResult.map(_ == "FAIL").getOrElse(false)) map | else map.updated(agent,result) | } | } res0: scala.collection.immutable.Map[String,String] = Map((Agent,PASS)) scala> res0.toList res1: List[(String,String)] = List((Agent 2,FAIL)) 或者这是一个更短,更模糊的解决方案: scala> l.groupBy(_._1).map(pair => (pair._1,pair._2.reduceLeft((a,b) => if ("FAIL" == a._2 || "FAIL" == b._2) (a._1,"FAIL") else a))).map(_._2).toList res2: List[(java.lang.String,java.lang.String)] = List((Agent 2,FAIL)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |