我想在MutableMap中存盤rowid(key)和orderId(value)等資訊。然后遍歷MutableMap,得到當前item的key和value以及下一個item的key和value。這樣做的原因是,當我遍歷 Map 時,我正在使用第二個專案值更改第一個專案的值,或者我正在使用第一個專案值更改第二個專案值的值。
例子:
val mutableMap: MutableMap<Int, Int> = mutableMapOf<Int, Int>()
mutableMap[350] = 0
mutableMap[351] = 1
mutableMap[352] = 2
mutableMap[353] = 3
mutableMap.put(354, 4)
mutableMap.put(355, 5)
mutableMap.put(356, 6)
for (key in mutableMap.keys) {
Log.d("print data", "print data, Key = ${key}, Value = ${mutableMap[key]}")
}
如何同時獲取此專案:myLinkedHashMap[450] = 0 和此專案 myLinkedHashMap[453] = 3 資訊,以便我可以在它們之間交換值?
uj5u.com熱心網友回復:
雖然 Map 和 MutableMap 介面并沒有聲稱是有序的,但mutableMapOf無論如何使用的具體實作都是有序的。這是有保證的,因為它是在函式的檔案中宣告的。因此,如果您正在使用在本地宣告的 MutableMap mutableMapOf,那么您知道它是有序的。如果您正在使用從其他類傳遞給您的 MutableMap,那么您不能確定它是有序的。但這應該是一種非常罕見的情況,因為在類之間傳遞可變集合的封裝很差。
要迭代成對排序的映射,您可以zipWithNext在鍵上使用。此呼叫創建鍵串列的副本,因此您可以安全地在回圈內改變映射。這就像一個成對的移動視窗——除了第一個和最后一個元素之外的每個元素都將出現在兩個不同的對中,一次作為第二個元素,然后一次作為第一個元素。
for ((keyA, keyB) in mutableMap.keys.zipWithNext()) {
}
如果你想迭代獨占對,你可以使用chunked(2)而不是zipWithNext(),但你需要確保你只分塊偶數個元素:
for ((keyA, keyB) in mutableMap.keys.take(mutableMap.size - mutableMap.size % 2).chunked(2)) {
}
// or
for (keys in mutableMap.keys.chunked(2)) {
if (keys.size == 1) continue
val (keyA, keyB) = keys
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520077.html
上一篇:正文請求中未傳遞默認引數
