假设我有一个XML和地图
val xml =
<a>
<b x="x1" y="y1"/>
<b x="x2" y="y2"/>
<b x="x3" y="y3"/>
</a>
val m = Map("x1" -> "y1", "x2" -> "y2", "x3" -> "y3")
我从XML中获取<b>
元素,并检查元素是否包含x
和y
属性,如地图m
中所示。
val bs = xml \\ "b"
((bs \\ "@x").map(_.text) zip (bs \\ "@y").map(_.text)).toSet == m.toSet
此代码的问题:
bs
过了两次
等您如何修复/改进此代码?
答案 0 :(得分:1)
如何创建元组列表,转换然后设置:
scala> val m = Map("x1" -> "y1", "x2" -> "y2", "x3" -> "y3")
m: scala.collection.immutable.Map[String,String] = Map(x1 -> y1, x2 -> y2, x3 -> y3)
scala> m.toSet
res56: scala.collection.immutable.Set[(String, String)] = Set((x1,y1), (x2,y2), (x3,y3))
scala> val m2 = bs map ( node => ( (node \\ "@x").text , (node \\ "@y").text ))
m2: scala.collection.immutable.Seq[(String, String)] = List((x1,y1), (x2,y2), (x3,y3))
scala> m2.toSet
res57: scala.collection.immutable.Set[(String, String)] = Set((x1,y1), (x2,y2), (x3,y3))
scala> m.toSet == m2.toSet
res49: Boolean = true