1

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"))
 }
4

4 に答える 4

8

使用できます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を確認できません。

于 2013-02-08T05:42:25.267 に答える
3

私が知っている最も簡単な解決策は次のとおりです。

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
于 2013-02-08T06:14:27.260 に答える
2

を作成するOrderedMapか、を並べ替えてkeys、その並べ替えの結果を処理することができます。

于 2013-02-08T05:47:12.203 に答える
2

変数 articlemap.keys は typeIterable[String]ですが、ケースの一致は type で一致しています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)
于 2013-02-08T05:41:15.670 に答える