[英]Scala Print Map in Order
我有一个Map [String,String],我想根据键以特定顺序打印它。 例如,我要打印id,名称,地址的值。 所以我想将我的键匹配到“ id”,“ name”,“ address”,然后在每个键上打印值。 我有以下代码,但不起作用:
articlesmap.keys match{
case ("id") => println(articlesmap.get("id"))
case ("name") => println(articlesmap.get("name"))
case ("address") => println(articlesmap.get("address"))
}
您可以for
:
for {
k <- Seq("id", "name", "address") // the keys in the order you want to print them.
v <- articlesmap.get(k)
} println (k+ " is " + v)
如果您只想打印值,则collect
会很好:
Seq("id", "name", "address") collect articlesmap foreach println
collect
比map
ID更好,您无法确定地图中是否确实有钥匙。
据我所知,这是最简单的解决方案:
scala> val keys = Seq("id", "name", "address")
keys: Seq[java.lang.String] = List(id, name, address)
scala> val articlesmap = Map("id" -> 1, "name" -> "john", "address" -> "some address")
articlesmap: scala.collection.immutable.Map[java.lang.String,Any] = Map(id -> 1, name -> john, address -> some address)
scala> keys map articlesmap foreach println
1
john
some address
scala> val keys = Seq("name", "id", "address")
keys: Seq[java.lang.String] = List(name, id, address)
scala> keys map articlesmap foreach println
john
1
some address
变量Iterable[String]
的类型为Iterable[String]
,但您的大小写匹配的类型为String
。 尝试以下方法:
def mapTest(map: Map[String, String]) {
map.keys.foreach {
case ("id") => println(map.get("id"))
case ("name") => println(map.get("name"))
case ("address") => println(map.get("address"))
}
}
val mapper = Map("id" -> "123", "name" -> "Bob", "address" -> "123 Fake Street")
mapTest(mapper)
// => Some(123)
// Some(Bob)
// Some(123 Fake Street)
您可以创建一个OrderedMap
,也可以对keys
排序并处理该排序的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.