我正在處理演算法型別的挑戰,我正在通過列印陳述句進行除錯,我似乎無法弄清楚為什么鍵的值不是我所期望的
var mapNums = mutableMapOf<Int, Int>()
//imaginary array
//var nums = [34,28,11,21,3,34,8,7,34,7,31,7,3,28,18]
var count = 0
for (n in nums) {
if (mapNums.containsKey(n)) {
count
mapNums[n] = count
} else if (!mapNums.containsKey(n)) {
count = 1
mapNums[n] = count
}
}
println(mapNums)
//prints {34=2, 28=4, 11=1, 21=1, 3=3, 8=1, 7=2, 31=1, 18=1}
正如您所看到的,鍵和值不是它們應該是的,我不知道為什么。
uj5u.com熱心網友回復:
這是因為您count在回圈外重用了相同的變數,因此它會不斷從不同的鍵遞增。
相反,您應該從地圖中獲取當前計數,然后將其放高一個:
val nums = intArrayOf(34,28,11,21,3,34,8,7,34,7,31,7,3,28,18)
val mapNums = mutableMapOf<Int, Int>()
for (n in nums) {
val count = mapNums[n] ?: 0
mapNums[n] = count 1
}
println(mapNums) // {34=3, 28=2, 11=1, 21=1, 3=2, 8=1, 7=3, 31=1, 18=1}
uj5u.com熱心網友回復:
您可以使用以下代碼生成所需的地圖:
val nums = intArrayOf(34, 28, 11, 21, 3, 34, 8, 7, 34, 7, 31, 7, 3, 28, 18).toList()
println(nums.groupingBy { it }.eachCount())
自己試試
這里使用與鍵選擇器相同的元素groupingBy創建一個Grouping源。然后eachCount按關鍵字對 Grouping 源中的元素進行分組,并對每個組中的元素進行計數。
您還可以參考檔案以獲取有關groupingBy和eachCount 的更多資訊。
uj5u.com熱心網友回復:
var mapNums = mutableMapOf<Int, Int>()
//imaginary array
var nums = arrayOf(34,28,11,21,3,34,8,7,34,7,31,7,3,28,18)
for (n in nums) {
mapNums[n] = mapNums[n]?.plus(1) ?: 1
}
println(mapNums)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365267.html
