[arrays] 스칼라에서 목록 끝에 요소 추가

어리석은 질문처럼 들리지만 인터넷에서 찾은 것은 쓰레기였습니다. 단순히 type 요소를 Tlist에 추가 할 수 없습니다 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에 요소를 추가 할 수 없습니다 List. 그것은이다 불변의 데이터 구조 자바 문자열처럼. 스칼라에서 “목록에 요소를 추가”할 때 실제로하는 일은 기존 List에서 새 List 를 만드는 것 입니다. (출처)

이러한 사용 사례에 목록을 사용하는 대신 ArrayBuffer또는을 사용하는 것이 좋습니다 ListBuffer. 이러한 데이터 구조에는 새로운 요소가 추가되도록 설계되었습니다.

마지막으로 모든 작업이 완료된 후 버퍼를 목록으로 변환 할 수 있습니다. 다음 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)


답변

두 개의 목록을 추가하거나 추가하거나 목록 및 배열을
추가 할 수 있습니다.

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


답변