在Tcl 8.0中使用keylset统计列表重复元素的出现次数
在Tcl 8.0中统计列表元素出现次数
给定目标列表:
set list {a b a c 10 10 10 d s q}
需要统计每个元素的出现次数,输出格式如下:
a 2 b 1 c 1 10 3 d 1 s 1 q 1
由于Tcl 8.0不支持dict,可以用数组来实现需求,这是Tcl 8.0原生支持的方案:
# 初始化空数组用于存储计数 array set count {} # 遍历列表,逐个统计元素出现次数 foreach elem $list { if {[info exists count($elem)]} { incr count($elem) } else { set count($elem) 1 } } # 按元素排序后输出结果,保证格式对齐 foreach elem [lsort [array names count]] { puts [format "%-2s %d" $elem $count($elem)] }
代码说明:
array set count {}:创建一个空数组,用来记录每个元素的出现次数foreach elem $list:遍历目标列表中的每一个元素info exists count($elem):检查当前元素是否已经在数组中存在,存在则用incr累加计数,不存在则初始化为1lsort [array names count]:对数组的键(即列表元素)进行排序,保证输出有序format "%-2s %d":格式化输出,让元素和计数对齐,符合你需要的格式
内容的提问来源于stack exchange,提问作者Theoretical Physics
相关产品推荐
相关产品推荐

