2016-11-08 4 views
0

비어있는 이 초기화되어 있고 숫자는 n이고, nListBuffer[(String, Int)]으로 채우고 싶습니다.스칼라에서 다른 ListBuffer 내에 중첩 ListBuffer를 n 번 만드는 방법?

예를 들어 n=2 인 경우 ListBuffer[(String, Int)]ListBuffer[ListBuffer[(String, Int)]]()으로 초기화 할 수 있습니다. n 번 루프를 실행하고 insertAll 함수를 사용하여 빈 목록을 삽입하려고했지만 작동하지 않았습니다.

답변

3

사용 기입

fill 미리 정의 요소 데이터 구조를 작성하기 위해 표준 스칼라 라이브러리 함수이다. 그것의 매우 편리하고 많은 타이핑을 저장하십시오. 표준 라이브러리에서

ListBuffer.fill(100)(ListBuffer("Scala" -> 1)) 

스칼라 REPL

scala> import scala.collection.mutable._ 
import scala.collection.mutable._ 

scala> ListBuffer.fill(100)(ListBuffer("Scala" -> 1)) 
res4: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[(String, Int)]] = ListBuffer(ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)) ... 

충전 구현

def fill[A](n: Int)(elem: => A): CC[A] = { 
    val b = newBuilder[A] 
    b.sizeHint(n) 
    var i = 0 
    while (i < n) { 
     b += elem 
     i += 1 
    } 
    b.result() 
    } 

상기 구현은 하나 개의 차원 데이터 구조이다.

일반 제안

자바 방식처럼 스칼라를 사용하는 것처럼 보입니다. 이것은 좋지 않다. 명백한 이익을위한 일을하기위한 기능적인 방법을 포용하십시오.

mutable 컬렉션 대신 List, Vector과 같은 컬렉션을 사용하십시오. 문자열에 대한 이유가있을 때까지 가변 콜렉션을 사용하지 마십시오.

불변의 목록

List.fill(100)(List("scala" -> 1)) 

scala -> 1을 사용하여 수행 할 수 있습니다

같은 일이 ("scala", 1)

과 동일
관련 문제