kotlin에서 목록을 복제하거나 복사하는 방법
코틀린에서 목록을 복사하는 방법은?
사용하고 있다
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
더 쉬운 방법은 없나요?
이거 잘 돼.
val selectedSeries = series.toMutableList()
사용할 수 있습니다.
목록 -> toList()
어레이 -> to Array()
Array List -> to Array()
MutableList -> toMutableList()
예:
val array = arrayListOf("1", "2", "3", "4")
val arrayCopy = array.toArray() // copy array to other array
Log.i("---> array " , array?.count().toString())
Log.i("---> arrayCopy " , arrayCopy?.count().toString())
array.removeAt(0) // remove first item in array
Log.i("---> array after remove" , array?.count().toString())
Log.i("---> arrayCopy after remove" , arrayCopy?.count().toString())
인쇄 로그:
array: 4
arrayCopy: 4
array after remove: 3
arrayCopy after remove: 4
목록에 kotlin 데이터 클래스가 있는 경우 이 작업을 수행할 수 있습니다.
selectedSeries = ArrayList(series.map { it.copy() })
다음 두 가지 방법을 생각해 낼 수 있습니다.
1. val selectedSeries = mutableListOf<String>().apply { addAll(series) }
2. val selectedSeries = mutableListOf(*series.toTypedArray())
업데이트: 새로운 타입 추론 엔진(Kotlin 1.3에서는 opt-in)을 사용하면 첫 번째 예에서는 범용 타입 파라미터를 생략하고 다음과 같이 설정할 수 있습니다.
1. val selectedSeries = mutableListOf().apply { addAll(series) }
참고: 새로운 추론을 선택하는 방법은kotlinc -Xnew-inference ./SourceCode.kt
명령줄 또는kotlin { experimental { newInference 'enable'}
그래들을 위해.새로운 유형 추론에 대한 자세한 내용은 KotlinConf 2018 - Svetlana Isakova의 새로운 유형 추론과 관련 언어 특징, 특히 '빌더에 대한 추론'을 확인하십시오.
Java와 마찬가지로:
리스트:
val list = mutableListOf("a", "b", "c")
val list2 = ArrayList(list)
지도:
val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3)
val map2 = HashMap(map)
JVM(또는 Android)을 대상으로 하는 경우ArrayList와 HashMap의 복사 컨스트럭터에 의존하기 때문에 다른 타겟에서는 동작하지 않습니다.
제공된 내선번호를 사용할 수 있습니다.Iterable.toMutableList()
새로운 목록을 제공할 것입니다.불행하게도, 그 서명과 문서가 시사하는 바와 같이, 이 문서는 다음 사항을 확실하게 하기 위한 것입니다.Iterable
는 입니다.List
(마치toString
기타 다수to<type>
메서드).그것이 새로운 목록이 될 것이라고 장담할 수 있는 것은 아무것도 없다.예를 들어, 확장의 선두에 다음 행을 추가합니다.if (this is List) return this
는 정당한 퍼포먼스 향상입니다(실제로 퍼포먼스가 향상되는 경우).
또, 그 이름 때문에, 결과 코드가 명확하지 않습니다.
결과를 확실히 하기 위해서, 독자적인 확장을 추가하고, 보다 명확한 코드를 작성합니다(어레이의 경우와 같음).
fun <T> List<T>.copyOf(): List<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
fun <T> List<T>.mutableCopyOf(): MutableList<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
주의:addAll
네이티브를 사용하여 복사하는 것이 가장 빠릅니다.System.arraycopy
실시에 있어서ArrayList
.
또, 이것은 당신에게 얄팍한 카피밖에 주지 않게 주의해 주세요.
편집:
보다 일반적인 버전을 사용할 수 있습니다.
fun <T> Collection<T>.copyOf(): Collection<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
fun <T> Collection<T>.mutableCopyOf(): MutableCollection<T> {
return mutableListOf<T>().also { it.addAll(this) }
}
얄팍한 복사를 위해, 나는 제안합니다.
.map{it}
그것은 많은 컬렉션 타입에 대응합니다.
를 사용할 수 있습니다.ArrayList
컨스트럭터:ArrayList(list)
val original = listOf("A", "B", "C")
val copy = original.toCollection(mutableListOf())
새로 만듭니다.MutableList
그런 다음 원본의 각 요소를 새로 만든 목록에 추가합니다.
여기서 유추된 유형은 다음과 같습니다.MutableList<String>
이 새 목록의 변경 가능성을 표시하지 않으려면 유형을 불변 목록으로 명시적으로 선언할 수 있습니다.
val copy: List<String> = original.toCollection(mutableListOf())
val selectedSeries = listOf(*series.toTypedArray())
var oldList: List<ClassA>?
val newList = oldList.map { it.copy() }
얕은 카피, 딥 카피 클로닝, 그 외의 많은 시도 끝에, 이 솔루션은 확실히 당신에게 효과가 있을 것입니다.
val iterator: Iterator<Object> = yourList.iterator()
while (iterator.hasNext())
newList.add(iterator.next().copy())
IMHO는 Kotlin의 새로운 버전(1.6+)에서 컬렉션 빌더를 사용하는 것이 가장 좋고 가장 독특한 방법입니다.
val shallowListCopy = buildList { addAll(list) }
심플 리스트에는, 상기의 적절한 솔루션이 많이 있습니다.
하지만, 얕은 여울 목록을 위한 것일 뿐이죠.
2차원에 합니다.ArrayList
ArrayList
보면,은 ' 좋다'에 해당합니다.MutableList
명시적 하지 않습니다.MutableList
더 많은 차원이 필요하다면 더 많은 기능을 만들어야 한다.
fun <T>cloneMatrix(v:ArrayList<ArrayList<T>>):ArrayList<ArrayList<T>>{
var MatrResult = ArrayList<ArrayList<T>>()
for (i in v.indices) MatrResult.add(v[i].clone() as ArrayList<T>)
return MatrResult
}
정수 행렬 데모:
var mat = arrayListOf(arrayListOf<Int>(1,2),arrayListOf<Int>(3,12))
var mat2 = ArrayList<ArrayList<Int>>()
mat2 = cloneMatrix<Int>(mat)
mat2[1][1]=5
println(mat[1][1])
알 수 있다12
Kotlin에서 목록을 복사하기 위해 아래 코드를 사용해 보십시오.
arrayList2.addAll(arrayList1.filterNotNull())
언급URL : https://stackoverflow.com/questions/46846025/how-to-clone-or-copy-a-list-in-kotlin
'programing' 카테고리의 다른 글
배열을 인수로 Bash 함수에 전달하는 방법 (0) | 2023.04.16 |
---|---|
줄 바꿈 없이 빠르게 인쇄하다 (0) | 2023.04.16 |
Bash 스크립트에서 sftp 명령을 비밀번호로 실행하려면 어떻게 해야 합니까? (0) | 2023.04.16 |
.gitignore는 Git에 의해 무시됩니다. (0) | 2023.04.16 |
SQL: 열에서 고유한 값 수를 찾습니다. (0) | 2023.04.11 |