0

各要素を(要素、一致する正規表現)に配列にマッピングすることにより、文字列の配列をマップ(文字列、文字列)の配列に変換しようとしています。私のコードは次のとおりですが、実行するとエラーが発生します。

var articles:Array[Map[String,String]] = rawArticles map(x => x, x match {
    case ArticleRE(id) => id
    case _ => " " 
}
)).toMap

rawArticles は元の配列で、ArticleRE は一致する正規表現です。

4

2 に答える 2

1

あなたの問題は、Seq [(A、B)]ではないものでtoMapを呼び出そうとしているように見えます。このような些細なケースを想定すると(Scala 2.10ではいくつかの変更を加えて問題なくコンパイルされます):

val rawArticles = Array("articleOne", "articleTwo", "articleThree")
val articleRE = "(.*)".r
/* some place holder value for no match */
val noMatch = ""

val articles = rawArticles map { x => Map(
  x -> x match {
    case articleRE(id) => (id, articleRE.toString)
    case _             => ("", noMatch)
  })
}

ここでの問題は、タプルのSeqではないSeqを変換しようとしたことだと思います。caseマップはをとることができるため、マップで直接使用することもできますPartialFunction

于 2013-02-07T04:49:33.070 に答える
0

必要なタイプが確かな場合、これは機能するはずです:

var articles = rawArticles.map(x => Map(x -> (x match {
  case ArticleRE(id) => id
  case _ => " "
})))  
于 2013-02-07T07:31:37.157 に答える