빈 목록을 선언 한 다음 스칼라에 추가하는 방법은 무엇입니까?
다음과 같은 코드가 있습니다.
val dm = List[String]()
val dk = List[Map[String,Object]]()
.....
dm.add("text")
dk.add(Map("1" -> "ok"))
그러나 런타임 java.lang.UnsupportedOperationException이 발생합니다.
빈 목록이나 빈지도를 선언해야하며 나중에 코드에서 채워야하는 일부도 있습니다.
스칼라 목록은 기본적으로 설명 수 없습니다. 요소를 "추가"할 수 없지만 새 요소를 추가하여 새 목록을 만들 수 있습니다. 그것이이기 때문에 새로운 목록, 당신은 (당신이 발을 사용할 수 있습니다) 참조를 다시 할당해야합니다.
var dm = List[String]()
var dk = List[Map[String,AnyRef]]()
.....
dm = "text" :: dm
dk = Map(1 -> "ok") :: dk
운영자 ::
는 새 목록을 만듭니다. 더 짧은 구문을 사용할 수 있습니다.
dm ::= "text"
dk ::= Map(1 -> "ok")
NB : 에이 형식을 사용하지 않는 스칼라 Object
하지만 Any
, AnyRef
또는 AnyVal
.
항목을 변경해야하는 경우 ArrayBuffer
또는 LinkedBuffer
대신 사용하십시오. 그러나 다음은 다루는 것이 좋습니다.
빈 목록이나 빈지도를 선언해야하며 나중에 코드에서 채워야하는 일부도 있습니다.
대신 요소를 반환하는 코드로 목록을 채우십시오. 이를 수행하는 방법에는 여러 가지가 있고 몇 가지 예를 들어 보겠습니다.
// Fill a list with the results of calls to a method
val l = List.fill(50)(scala.util.Random.nextInt)
// Fill a list with the results of calls to a method until you get something different
val l = Stream.continually(scala.util.Random.nextInt).takeWhile(x => x > 0).toList
// Fill a list based on its index
val l = List.tabulate(5)(x => x * 2)
// Fill a list of 10 elements based on computations made on the previous element
val l = List.iterate(1, 10)(x => x * 2)
// Fill a list based on computations made on previous element, until you get something
val l = Stream.iterate(0)(x => x * 2 + 1).takeWhile(x => x < 1000).toList
// Fill list based on input from a file
val l = (for (line <- scala.io.Source.fromFile("filename.txt").getLines) yield line.length).toList
모두가 이미 언급했듯이 Scala에서 목록을 사용하는 가장 좋은 방법이 아닙니다.
scala> val list = scala.collection.mutable.MutableList[String]()
list: scala.collection.mutable.MutableList[String] = MutableList()
scala> list += "hello"
res0: list.type = MutableList(hello)
scala> list += "world"
res1: list.type = MutableList(hello, world)
scala> list mkString " "
res2: String = hello world
스칼라의 기본 컬렉션은 추가 된 새 목록을 반환하는 + 메소드가 있습니다. add 메소드와 같은 것이 필요한 경우 + = 메소드가있는 http://www.scala-lang.org/api/current/scala/collection/mutable/MutableList.html 과 같이 변경 가능한 수집이 필요합니다 .
에서 언급 한 이상 바와 같이 대답 의 스칼라 목록 불변의 모음입니다. 를 사용하여 빈 목록을 만들 수 있습니다 . 그런 다음 당신은 방법을 사용할 수 있습니다. , 또는 목록에 요소를 추가하기 위해서입니다..empty[A]
:+
+:
::
scala> val strList = List.empty[String]
strList: List[String] = List()
scala> strList:+ "Text"
res3: List[String] = List(Text)
scala> val mapList = List.empty[Map[String, Any]]
mapList: List[Map[String,Any]] = List()
scala> mapList :+ Map("1" -> "ok")
res4: List[Map[String,Any]] = List(Map(1 -> ok))
스칼라에서 ListBuffers를 사용하여 빈 목록을 만들고 나중에 문자열을 추가 할 수 있습니다. ListBuffer는 변경 가능하기 때문입니다. 또한 모든 List 함수는 스칼라의 ListBuffer에 사용할 수 있습니다.
import scala.collection.mutable.ListBuffer
val dm = ListBuffer[String]()
dm: scala.collection.mutable.ListBuffer[String] = ListBuffer()
dm += "text1"
dm += "text2"
dm = ListBuffer(text1, text2)
원하는 경우 .toList를 사용하여 이것을 목록으로 변환 할 수 있습니다.
귀하의 경우에는 내가 사용 val dm = ListBuffer[String]()
하고val dk = ListBuffer[Map[String,anyRef]]()
참고 URL : https://stackoverflow.com/questions/6557169/how-to-declare-empty-list-and-then-add-string-in-scala
'ProgramingTip' 카테고리의 다른 글
신속하게 UILabel에 밑줄을 긋는 방법은 무엇입니까? (0) | 2020.10.22 |
---|---|
DomDocument (PHP)에 의해 잘 구성되지 않은 HTML을로드 할 때 경고하지 않습니다 (0) | 2020.10.22 |
Jersey 클라이언트 : 목록을 쿼리 매개 변수로 추가하는 방법 (0) | 2020.10.21 |
내 레일이 환경에 어떤 진단이 있습니까? (0) | 2020.10.21 |
뷰 열을 NULL이 아닌 만드는 방법 (0) | 2020.10.21 |