如何在 nim 中按键对 CountTable 进行排序?
How to sort a CountTable by key in nim?
在nim中,我有一个CountTable:
var
sizeFreqs = initCountTable[int]()
我想按键进行数字排序,而 sizeFreqs.sort()
将按计数进行排序。
我不明白 documentation 关于 nim 中的排序。
非常感谢关于排序的一些一般性指导,因为我想实现的第二种情况是如果使用 wordsFreqs = initCountTable[string]()
而不是按字符串长度排序。
谢谢
安德里亚
我会将 table 的键提取到 seq
,然后命令 seq 将其用作某种索引:
import algorithm # This provides "sort"
var index: seq[char]
for k in sizeFrequencies.keys:
index.add k
index.sort()
对于第二种情况,可以传一个过程给sort
:
proc lenSort(x, y: string): int =
if x.len == y.len:
return 0
elif x.len > y.len:
return 1
else:
return -1
然后:
let myString = @["AAA", "BBB", "BB", "AA", "A", "BBB", "BB", "BB", "BB"]
var wordFrequencies = initCountTable[string]()
for c in myString:
wordFrequencies.inc(c)
var index: seq[string]
for k in wordFrequencies.keys:
index.add k
echo wordFrequencies
# Prints {"BBB": 2, "A": 1, "AA": 1, "AAA": 1, "BB": 4}
wordFrequencies.sort
echo wordFrequencies
# Sorted by word count, prints
# {"BB": 4, "BBB": 2, "A": 1, "AA": 1, "AAA": 1}
index.sort(lenSort)
echo index
# Prints @["A", "AA", "BB", "BBB", "AAA"]
注意,最后的排序是stable,也就是说,长度相同的项目(在本例中为“BBB”和“AAA”,例如)保留与CountTable相同的顺序。
使用 index
您可以对 CountTable 进行虚拟排序,例如:
for i in index:
echo echo i, " -> ", wordFrequencies[i]
# A -> 1
# AA -> 1
# BB -> 4
# BBB -> 2
# AAA -> 1
在nim中,我有一个CountTable:
var
sizeFreqs = initCountTable[int]()
我想按键进行数字排序,而 sizeFreqs.sort()
将按计数进行排序。
我不明白 documentation 关于 nim 中的排序。
非常感谢关于排序的一些一般性指导,因为我想实现的第二种情况是如果使用 wordsFreqs = initCountTable[string]()
而不是按字符串长度排序。
谢谢 安德里亚
我会将 table 的键提取到 seq
,然后命令 seq 将其用作某种索引:
import algorithm # This provides "sort"
var index: seq[char]
for k in sizeFrequencies.keys:
index.add k
index.sort()
对于第二种情况,可以传一个过程给sort
:
proc lenSort(x, y: string): int =
if x.len == y.len:
return 0
elif x.len > y.len:
return 1
else:
return -1
然后:
let myString = @["AAA", "BBB", "BB", "AA", "A", "BBB", "BB", "BB", "BB"]
var wordFrequencies = initCountTable[string]()
for c in myString:
wordFrequencies.inc(c)
var index: seq[string]
for k in wordFrequencies.keys:
index.add k
echo wordFrequencies
# Prints {"BBB": 2, "A": 1, "AA": 1, "AAA": 1, "BB": 4}
wordFrequencies.sort
echo wordFrequencies
# Sorted by word count, prints
# {"BB": 4, "BBB": 2, "A": 1, "AA": 1, "AAA": 1}
index.sort(lenSort)
echo index
# Prints @["A", "AA", "BB", "BBB", "AAA"]
注意,最后的排序是stable,也就是说,长度相同的项目(在本例中为“BBB”和“AAA”,例如)保留与CountTable相同的顺序。
使用 index
您可以对 CountTable 进行虚拟排序,例如:
for i in index:
echo echo i, " -> ", wordFrequencies[i]
# A -> 1
# AA -> 1
# BB -> 4
# BBB -> 2
# AAA -> 1