0

これは私を夢中にさせます。なぜこれがエラーになるのかわかりません。

ここに私のコードの例があります:

var seqOfObjects:Seq[Map[String, String]] = Seq[Map[String, String]]()
for(item <- somelist) {
  seqOfObjects += Map(
     "objectid" -> item(0).toString,
     "category" -> item(1),
     "name" -> item(2),
     "url" -> item(3),
     "owneremail" -> item(4),
     "number" -> item(5).toString)
}

これにより、次のようなエラーが表示されます。

Type mismatch, expected: String, actual: Map[String, String]

しかし、 aMap[String, String]はまさに私が my に追加したいものですSeq[Map[String, String]]

seqOfObjects私の変数が ?? を期待していると言っているのはなぜStringですか??

誰にも手がかりがありますか?ありがとう

4

2 に答える 2

3

a += bを意味しa = a.+(b)ます。この回答を参照してください。

にはメソッド+Seqないため、使用できません+=

scala> Seq[Int]() + 1
<console>:8: error: type mismatch;
 found   : Int(1)
 required: String
              Seq[Int]() + 1
                           ^

required: String文字列連結からです。この動作は から継承されていJavaます:

scala> List(1, 2, 3) + "str"
res0: String = List(1, 2, 3)str

+ここでの実際のメソッドはStringAddラッパーからのものです。暗黙的なメソッドを参照してくださいPredef.any2stringadd

:+=または+:=の代わりに使用できます+=

のデフォルトの実装Seqはであるため、 andの代わりにandListを使用する必要があります。scala コレクションのパフォーマンス特性を参照してください。+:+:=:+:+=

Listの代わりに使用することもできますSeq。には::メソッドがListあるので、次を使用できます::=

var listOfInts = List[Int]()
listOfInts ::= 1

以下を使用して、可変変数なしでコードを書き直すことができますmap

val seqOfObjects =
  for(item <- somelist) // somelist.reverse to reverse order
    yield Map(...)

要素の順序を逆にするには、メソッドを使用できますreverse

于 2013-09-27T10:28:42.823 に答える
1

短いfoldLeft例:

sl.foldLeft(Seq[Map[Srting, String]]()){ (acc, item) =>  Map(/* map from item */) +: acc }
于 2013-09-27T10:26:28.953 に答える