2013-09-27 4 views
0

이것은 나를 미치게하는데, 왜 이것이 저에게 오류를 일으키는 지 알 수 없습니다. 여기[String, String]을 Seq에 추가하십시오. [Map [String, String]]

내 코드의 예 :

이 나에게 말을 오류 제공
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]]에 추가 할 정확히이다.

내 변수 seqOfObjectsString이 필요하다고 말하는 이유는 무엇입니까 ??

누구나 단서가 있습니까? 감사

답변

3

a += ba = 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입니다. 스칼라 컬렉션 Performance Characteristics을 참조하십시오.

Seq 대신 List을 사용할 수도 있습니다. 이 List에서 :: 방법은, 그래서 당신은 ::=를 사용할 수 있습니다

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

당신은 map를 사용하여 변경 가능한 변수없이 코드를 다시 작성할 수 있습니다 :

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

역 회전 요소는 reverse 방법을 사용할 수 있습니다 주문.

+0

알겠습니다. 오류가 아니기 때문에 +는 생각조차하지 않았습니다. 그러나 그 모습은 다음과 같습니다 :) 감사합니다 @senia,이게 많은 도움이됩니다! – raxelsson

1

짧은 foldLeft 예 :

sl.foldLeft(Seq[Map[Srting, String]]()){ (acc, item) => Map(/* map from item */) +: acc } 
+0

답장을 보내 주셔서 감사합니다. @Alexlv, 나는 이것도 조사 할 것입니다. intresting을 본다! – raxelsson

관련 문제