我有以下地图和清单
val a=Map(1->"<10",2->"<20")
val b=List((1,15),(2,15))
从b获取元组: 使用元组的第一个元素来查找地图,并比较第二个元素,如果它匹配则将其拾起:
e.g 对于(1,15)的元组,查找我们得到的地图&#34;&lt; 10&#34;,然后比较第二个元素15和&#34;&lt; 10&#34;,它失败了,所以扔这个元组消失了。 对于(2,15)的元组,我们将比较15与&#34;&lt; 20&#34;,它是正确的,所以保持(2,14)的元组。
scala是否可行?
答案 0 :(得分:3)
将"<10"
和"<20"
替换为函数:
val a = Map[Int, Int => Boolean](1 -> (_ < 10), 2 -> (_ < 20))
然后你可以这样做:
b filter { case (k, v) => a(k)(v) }
或等效地:
b filter Function.uncurried(a).tupled
答案 1 :(得分:3)
Scala既可编写脚本也可扩展。排序。
Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val a=Map(1->"<10",2->"<20")
a: scala.collection.immutable.Map[Int,String] = Map(1 -> <10, 2 -> <20)
scala> val b=List((1,15),(2,15))
b: List[(Int, Int)] = List((1,15), (2,15))
scala> import javax.script._
import javax.script._
scala> new ScriptEngineManager().getEngineByName("scala")
res0: javax.script.ScriptEngine = scala.tools.nsc.interpreter.IMain@4ba302e0
scala> b filter { case (k, v) => (res0 eval s"$v${a(k)}").asInstanceOf[Boolean] }
res1: List[(Int, Int)] = List((2,15))