diff options
author | GULPF <oscarnihlgard@gmail.com> | 2017-12-13 02:52:35 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-12-13 02:52:35 +0100 |
commit | 542d45f8826ec3566108ce6e2c3b456c7798af58 (patch) | |
tree | 3f4b092f27fd12158d01e88b10c13dff808dd412 /lib | |
parent | d550417f8b6dd9703f48f5dbd12c35b9037a7d02 (diff) | |
download | Nim-542d45f8826ec3566108ce6e2c3b456c7798af58.tar.gz |
Fix counttable smallest (#6912)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/collections/tables.nim | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/pure/collections/tables.nim b/lib/pure/collections/tables.nim index 48f8eed67..28fbaa632 100644 --- a/lib/pure/collections/tables.nim +++ b/lib/pure/collections/tables.nim @@ -993,9 +993,10 @@ proc inc*[A](t: var CountTable[A], key: A, val = 1) = proc smallest*[A](t: CountTable[A]): tuple[key: A, val: int] = ## returns the (key,val)-pair with the smallest `val`. Efficiency: O(n) assert t.len > 0 - var minIdx = 0 + var minIdx = -1 for h in 1..high(t.data): - if t.data[h].val > 0 and t.data[minIdx].val > t.data[h].val: minIdx = h + if t.data[h].val > 0 and (minIdx == -1 or t.data[minIdx].val > t.data[h].val): + minIdx = h result.key = t.data[minIdx].key result.val = t.data[minIdx].val @@ -1329,3 +1330,7 @@ when isMainModule: assert((a == b) == true) assert((b == a) == true) + block: # CountTable.smallest + var t = initCountTable[int]() + for v in items([4, 4, 5, 5, 5]): t.inc(v) + doAssert t.smallest == (4, 2) |