스칼라에서 목록 끝에 요소 추가
유형 요소를 추가할 수 없습니다.T
일람표에.List[T]
로 시도했습니다.myList ::= myElement
하지만 그것은 이상한 물체를 만들고 접근하는 것처럼 보입니다.myList.last
항상 목록에 포함된 첫 번째 요소를 반환합니다.어떻게 하면 이 문제를 해결할 수 있을까요?
List(1,2,3) :+ 4
Results in List[Int] = List(1, 2, 3, 4)
이 작업의 복잡도는 O(n)입니다.이 작업이 자주 필요하거나 긴 목록의 경우 다른 데이터 유형(예: ListBuffer)을 사용하는 것이 좋습니다.
그것은 당신이 (적어도 불변의 목록으로) 그것을 해서는 안되기 때문입니다.데이터 구조의 끝에 요소를 추가해야 하고 이 데이터 구조가 목록이어야 하고 이 목록이 불변해야 하는 경우 다음 중 하나를 수행합니다.
(4 :: List(1,2,3).reverse).reverse
또는 다음과 같습니다.
List(1,2,3) ::: List(4)
Scala의 목록은 수정되도록 설계되지 않았습니다.사실 스칼라에는 요소를 추가할 수 없습니다. 자바 문자열과 같은 불변의 데이터 구조입니다.Scala에서 "목록에 요소 추가"할 때 실제로 수행하는 작업은 기존 목록에서 새 목록을 만드는 것입니다. (소스)
이러한 사용 사례에 목록을 사용하는 대신 또는 를 사용하는 것이 좋습니다.이러한 데이터 구조는 새 요소를 추가하도록 설계되었습니다.
마지막으로 모든 작업이 완료된 후 버퍼를 목록으로 변환할 수 있습니다.다음 REPL 예제를 참조하십시오.
scala> import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer
scala> var fruits = new ListBuffer[String]()
fruits: scala.collection.mutable.ListBuffer[String] = ListBuffer()
scala> fruits += "Apple"
res0: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple)
scala> fruits += "Banana"
res1: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana)
scala> fruits += "Orange"
res2: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana, Orange)
scala> val fruitsList = fruits.toList
fruitsList: List[String] = List(Apple, Banana, Orange)
이는 정답 중 하나와 비슷하지만 다른 방식입니다.
scala> val x = List(1,2,3)
x: List[Int] = List(1, 2, 3)
scala> val y = x ::: 4 :: Nil
y: List[Int] = List(1, 2, 3, 4)
두 개의 목록을 추가하거나 추가하거나 list&array를 추가할 수 있습니다.
추가:
var l = List(1,2,3)
l = l :+ 4
Result : 1 2 3 4
var ar = Array(4, 5, 6)
for(x <- ar)
{ l = l :+ x }
l.foreach(println)
Result:1 2 3 4 5 6
추가 중:
var l = List[Int]()
for(x <- ar)
{ l= x :: l } //prepending
l.foreach(println)
Result:6 5 4 1 2 3
목록은 Scala에서 변경할 수 없습니다.
가변 목록을 사용할 수 있습니다.
var l = scala.collection.mutable.MutableList(1,2,3)
l += 4
언급URL : https://stackoverflow.com/questions/7794063/appending-an-element-to-the-end-of-a-list-in-scala
'bestsource' 카테고리의 다른 글
구글 안드로이드가 .NET을 지원할 수 있을까요? (0) | 2023.05.29 |
---|---|
Mongodb Aggregation 프레임워크가 맵/축소보다 빠릅니까? (0) | 2023.05.24 |
유형 오류: worker()는 0개의 위치 인수를 사용하지만 1개가 지정되었습니다. (0) | 2023.05.24 |
다차원 배열 [][] vs [,] (0) | 2023.05.24 |
Azure SQL 데이터베이스 자동 확장 (0) | 2023.05.24 |