mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-14 07:13:27 +00:00
Correctly remove a key from CountTable when it is set to zero.
This commit is contained in:
@@ -2320,11 +2320,14 @@ proc `[]=`*[A](t: var CountTable[A], key: A, val: int) =
|
||||
## value of a key
|
||||
assert(not t.isSorted, "CountTable must not be used after sorting")
|
||||
assert val >= 0
|
||||
let h = rawGet(t, key)
|
||||
if h >= 0:
|
||||
t.data[h].val = val
|
||||
if val == 0:
|
||||
t.remove(key)
|
||||
else:
|
||||
insertImpl()
|
||||
let h = rawGet(t, key)
|
||||
if h >= 0:
|
||||
t.data[h].val = val
|
||||
else:
|
||||
insertImpl()
|
||||
|
||||
proc inc*[A](t: var CountTable[A], key: A, val: Positive = 1) =
|
||||
## Increments ``t[key]`` by ``val`` (default: 1).
|
||||
@@ -3113,6 +3116,13 @@ when isMainModule:
|
||||
doAssert t_mut['z'] == 1
|
||||
doAssert t_mut.hasKey('z') == true
|
||||
|
||||
block: #12813 #13079
|
||||
var t = toCountTable("abracadabra")
|
||||
doAssert len(t) == 5
|
||||
|
||||
t['a'] = 0 # remove a key
|
||||
doAssert len(t) == 4
|
||||
|
||||
block:
|
||||
var tp: Table[string, string] = initTable[string, string]()
|
||||
doAssert "test1" == tp.getOrDefault("test1", "test1")
|
||||
|
||||
Reference in New Issue
Block a user