หากคุณใช้ Kotlin คุณสามารถใช้ฟังก์ชันส่วนขยายได้เช่น:
fun <T> LongSparseArray<T>.valuesIterator(): Iterator<T> {
val nSize = this.size()
return object : Iterator<T> {
var i = 0
override fun hasNext(): Boolean = i < nSize
override fun next(): T = valueAt(i++)
}
}
fun <T> LongSparseArray<T>.keysIterator(): Iterator<Long> {
val nSize = this.size()
return object : Iterator<Long> {
var i = 0
override fun hasNext(): Boolean = i < nSize
override fun next(): Long = keyAt(i++)
}
}
fun <T> LongSparseArray<T>.entriesIterator(): Iterator<Pair<Long, T>> {
val nSize = this.size()
return object : Iterator<Pair<Long, T>> {
var i = 0
override fun hasNext(): Boolean = i < nSize
override fun next() = Pair(keyAt(i), valueAt(i++))
}
}
คุณสามารถแปลงเป็นรายการได้หากต้องการ ตัวอย่าง:
sparseArray.keysIterator().asSequence().toList()
ฉันคิดว่ามันอาจจะปลอดภัยที่จะลบรายการที่ใช้remove
ด้วยLongSparseArray
ตัวเอง (ไม่ใช่ในตัววนซ้ำ) เนื่องจากมันอยู่ในลำดับที่มากขึ้น
แก้ไข: ดูเหมือนว่าจะมีวิธีที่ง่ายขึ้นโดยใช้collection-ktx (ตัวอย่างที่นี่ ) มันนำไปใช้ในลักษณะที่คล้ายกันมากกับสิ่งที่ฉันเขียนโดยจริงแล้ว
Gradle ต้องการสิ่งนี้:
implementation 'androidx.core:core-ktx:#'
implementation 'androidx.collection:collection-ktx:#'
นี่คือการใช้งานของ LongSparseArray:
val sparse= LongSparseArray<String>()
for (key in sparse.keyIterator()) {
}
for (value in sparse.valueIterator()) {
}
sparse.forEach { key, value ->
}
และสำหรับผู้ที่ใช้ Java คุณสามารถใช้LongSparseArrayKt.keyIterator
, LongSparseArrayKt.valueIterator
และLongSparseArrayKt.forEach
ยกตัวอย่างเช่น เหมือนกันสำหรับกรณีอื่น ๆ