这让我发疯,我无法弄清楚为什么这会给我一个错误。
这是我的代码示例:
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]
但Map[String, String]
正是我要添加到Seq[Map[String, String]]
中的内容。
为什么说我的变量seqOfObjects
需要String
??
有人有线索吗? 感谢
答案 0 :(得分:3)
a += b
表示a = a.+(b)
。请参阅this answer。
+
中没有方法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
的默认实施是List
,因此您应该使用+:
和+:=
代替:+
和:+=
。请参阅scala集合的Performance Characteristics。
您也可以使用List
代替Seq
。 ::
中有List
方法,因此您可以使用::=
:
var listOfInts = List[Int]()
listOfInts ::= 1
您可以使用map
:
val seqOfObjects =
for(item <- somelist) // somelist.reverse to reverse order
yield Map(...)
要反转元素顺序,您可以使用reverse
方法。
答案 1 :(得分:1)
简短foldLeft
示例:
sl.foldLeft(Seq[Map[Srting, String]]()){ (acc, item) => Map(/* map from item */) +: acc }