복붙노트

[SCALA] 스칼라에서리스트에 요소를 추가합니다

SCALA

스칼라에서리스트에 요소를 추가합니다

나는 스칼라 2.10.2를 실행하고 있습니다. 그럼, 목록을 작성 목록에 일부 요소를 추가하고 나는 목록의 이름을 호출 할 때 목록에있는 모든 요소를 ​​볼 것으로 예상하고 싶습니다. 그러나 나는 아주 이상한 (I가 안돼서 때문에 나를 위해 적어도 이상한) 뭔가를 관찰했다. 아래는 내가 내 SBT 콘솔에서 할 뭘하려

scala> val l = 1.0 :: 5.5 :: Nil
l: List[Double] = List(1.0, 5.5)

scala> l
res0: List[Double] = List(1.0, 5.5)

scala> l ::: List(2.2, 3.7)
res1: List[Double] = List(1.0, 5.5, 2.2, 3.7)

scala> List(l) :+ 2.2
res2: List[Any] = List(List(1.0, 5.5), 2.2)

scala> l
res3: List[Double] = List(1.0, 5.5)

scala> 

먼저, 2 개 개의 요소 (1.0 및 5.5)와리스트 (L)를 만들었다. 나는 리터를 호출하고 내가 기대하는 것을 얻을; 두 요소. 지금은 사용하여 목록 ::: I 추가 요소의 새 목록 (2.2 및 3.7) 달콤한으로 새로운 목록을 반환에 다른 요소를 추가하려고! 새로운 구문을 사용해 스칼라에서리스트의 마지막 요소를 덧붙이 : 난 도움을 다른 사람의 코드를 확인 +. 그래서이 단계에서 나는 모든 행복 해요,하지만 난 리터 전화 나는 예상치 못한 얻을 :`res3을 : 목록 [더블] = 목록 (1.0, 5.5) '.

어디에서 추가 한 요소는? 어떻게 내가 리터 호출 할 때 내가 추가 한 물건을 모두 가진 새로운 목록을 얻을 수 있도록 올바르게 이러한 요소를 추가하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.당신은 불변의리스트를 사용하고 있습니다. 목록에있는 작업은 새로운 목록을 반환합니다. 이전 목록은 변경되지 않습니다. 다른 클래스 / 방법은 원래의 집합에 대한 참조를 보유하고, 나머지는 변경에 의존되는 경우에 매우 유용 할 수있다. 당신이 중 하나에 서로 다른 이름 발스을 사용할 수 있습니다

    당신은 불변의리스트를 사용하고 있습니다. 목록에있는 작업은 새로운 목록을 반환합니다. 이전 목록은 변경되지 않습니다. 다른 클래스 / 방법은 원래의 집합에 대한 참조를 보유하고, 나머지는 변경에 의존되는 경우에 매우 유용 할 수있다. 당신이 중 하나에 서로 다른 이름 발스을 사용할 수 있습니다

    val myList1 = 1.0 :: 5.5 :: Nil 
    val myList2 = 2.2 :: 3.7 :: mylist1
    

    또는 같은 VAR를 사용

    var myList = 1.0 :: 5.5 :: Nil 
    myList :::= List(2.2, 3.7)
    

    이에 해당하는 구문입니다 :

    myList = myList.:::(List(2.2, 3.7))
    

    또는 당신은 같은 가변 컬렉션 중 하나를 사용할 수 있습니다

    val myList = scala.collection.mutable.MutableList(1.0, 5.5)
    myList.++=(List(2.2, 3.7))
    

    원래 변경 가능한 목록을 수정하지 않습니다 다음과 혼동하지만, 새로운 값을 반환 할 수 없음 :

    myList.++:(List(2.2, 3.7))
    

    그러나 당신은 단지 성능이 중요한 코드에서 변경 가능한 컬렉션을 사용해야합니다. 불변의 컬렉션에 대한 이유와 사용하는 것이 훨씬 쉽다. 하나의 큰 장점은 불변의 목록이며, scala.collection.immutable.Vector는 공변입니다. 그건 아직 당신에게하지 평균 아무것도 않는 경우 걱정하지 마십시오. 그것의 장점은 완전하게 이해하지 않고 사용할 수 있습니다. 따라서 당신은 기본적으로 사용하고 컬렉션은 실제로 scala.collection.immutable.List 자사는 자동으로 가져옵니다.

    내 기본 모음으로 목록을 사용하는 경향이있다. 2.12.6 서열 기본값에서 변경할 수 서열하기 전에이로는 불변이 기본값.

  2. ==============================

    2.사용 가져 오기 scala.collection.mutable.MutableList 또는 유사한 당신은 정말 돌연변이를 필요로하는 경우.

    사용 가져 오기 scala.collection.mutable.MutableList 또는 유사한 당신은 정말 돌연변이를 필요로하는 경우.

    import scala.collection.mutable.MutableList
    val x = MutableList(1, 2, 3, 4, 5)
    x += 6 // MutableList(1, 2, 3, 4, 5, 6)
    x ++= MutableList(7, 8, 9) // MutableList(1, 2, 3, 4, 5, 6, 7, 8, 9)
    
  3. ==============================

    3.나는 당신이 시도 모든 명령의 결과를 설명하려고합니다.

    나는 당신이 시도 모든 명령의 결과를 설명하려고합니다.

    scala> val l = 1.0 :: 5.5 :: Nil
    l: List[Double] = List(1.0, 5.5)
    

    우선, 목록 (Predef.scala에 정의) scala.collection.immutable.List에 타입 별칭이다.

    목록 동반자 객체를 사용하면 목록을 인스턴스화하는 더 간단한 방법이다. 예 : 목록 (1.0,5.5)

    scala> l
    res0: List[Double] = List(1.0, 5.5)
    
    scala> l ::: List(2.2, 3.7)
    res1: List[Double] = List(1.0, 5.5, 2.2, 3.7)
    

    ::: 주어진 목록 접두사의 연결이 목록의 결과 목록을 반환

    원래 목록이 수정되지 않습니다

    scala> List(l) :+ 2.2
    res2: List[Any] = List(List(1.0, 5.5), 2.2)
    

    목록 (L)은 당신이 원하는 것을 확실히 목록 [목록 [더블]] 없습니다.

    : + ELEM 다음이 목록의 모든 요소로 구성된 새로운 목록을 반환합니다.

    유형 목록입니다 [모든]이 목록 [더블] 더블 사이의 공통의 슈퍼 클래스이기 때문이다

    scala> l
    res3: List[Double] = List(1.0, 5.5)
    

    immutable.List에 아무런 방법이 목록을 수정하지 않기 때문에 난 수정되지 않은 남아 있습니다.

  4. ==============================

    4.기존 목록에 요소를 추가 할 때문에, 당신은 var에 목록 [지능]를 사용하고 동일한 목록에 요소를 추가하는 방법에 유지할 수 있습니다. 주 -> 당신은 다음과 같이 목록을 기존에 요소를 삽입 있는지 확인해야합니다 : -

    기존 목록에 요소를 추가 할 때문에, 당신은 var에 목록 [지능]를 사용하고 동일한 목록에 요소를 추가하는 방법에 유지할 수 있습니다. 주 -> 당신은 다음과 같이 목록을 기존에 요소를 삽입 있는지 확인해야합니다 : -

    var에 L : 목록 [INT] = 목록 () // 빈 목록을 만듭니다

    L = 3 : 난 //리스트의 머리에 3을 추가

    L = 4 : L // 목록의 머리로 INT 4한다

    당신이 리터를 인쇄 할 때 // 이제, 당신은 목록에 두 가지 요소를 볼 수 (4, 3)

  5. from https://stackoverflow.com/questions/19610320/add-element-to-a-list-in-scala by cc-by-sa and MIT license