2013-07-25 2 views
0

아래 코드를 실행하면 userList의 크기가 0이됩니다. 아래에 추가 할 때 User 유형의 객체가 포함될 것으로 예상됩니다. List userList에 올바르게 추가하지 않습니까? 불변 List에 덧붙이불변 목록에 추가하는 방법?

object SimilarityData { 

    val userList = List.empty[User] 
    case class User(id: String, nCoordinate : Int) 

    def getUsers(): List[User] = 
    { 

     userList :+ 
     new User("1", 101010101) :+ 
     new User("2", 111011101) :+ 
     new User("3", 101010101) :+ 
     new User("4", 101110101) :+ 
     new User("5", 101110101) :+ 
     new User("6", 101011101) :+ 
     new User("7", 101010101) :+ 
     new User("8", 101010101) :+ 
     new User("9", 111000111); 

     userList 
    } 

    def main(args: Array[String]) { 
    println(userList.size) 
    } 

} 

답변

3

새로운 List의 요소를 추가한다. userList은 변경할 수 없으므로 할당 된 내용은 항상 List.empty입니다.

사용자를 추가 한 후 userList 크기를 얻으려면 추가로 만든 올바른 List을 반환해야 올바른 크기를 얻을 수 있습니다. 스칼라에서 메서드의 마지막 줄은 반환 값입니다. userList :+ ...이 새로운 List을 반환하기 때문에 userList에 일부 반환 값을 할당하고 반환하는 것과 같습니다.

object SimilarityData { 

    val userList = List.empty[User] 
    case class User(id: String, nCoordinate : Int) 

    def getUsers(): List[User] = 
    { 
     userList :+ 
     new User("1", 101010101) :+ 
     new User("2", 111011101) :+ 
     new User("3", 101010101) :+ 
     new User("4", 101110101) :+ 
     new User("5", 101110101) :+ 
     new User("6", 101011101) :+ 
     new User("7", 101010101) :+ 
     new User("8", 101010101) :+ 
     new User("9", 111000111);  
    } 

    def main(args: Array[String]) { 
    println(getUsers.size) 
    } 

} 

실행 그것은 :

scala> SimilarityData.main(Array[String]()) 
9 
5
  1. List는 데이터 구조를 붙일 지향된다. 여기에 추가하면이 O (n)이 복잡성, 붙이는 동안 - O (1)
  2. List은 불변의 데이터 구조는 기존 값을 수정할 수 없습니다,하지만 당신은 새로운 가치를 얻을 수있는 이유, 그건입니다 그것을 바탕으로 String 또는 Int을 생각해보십시오.

    def getUsers : List[User] = 
        new User("1", 101010101) +: 
        new User("2", 111011101) +: 
        new User("3", 101010101) +: 
        new User("4", 101110101) +: 
        new User("5", 101110101) +: 
        new User("6", 101011101) +: 
        new User("7", 101010101) +: 
        new User("8", 101010101) +: 
        new User("9", 111000111) +: 
        userList 
    
    : 계정에 위의 촬영

, 다음에 코드를 업데이트해야 최적의 결과를 달성하기 위해

관련 문제