我有以下代码来打印在列表中出现多次的字符串
set a [list str1/str2 str3/str4 str3/str4 str5/str6]
foreach x $a {
set search_return [lsearch -all $a $x]
if {[llength $search_return] > 1} {
puts "search_return : $search_return"
}
}
我需要打印在列表中出现多次的str3 / str4
答案 0 :(得分:1)
执行此操作的规范方法是使用数组或字典,它们都是关联映射。这是一个使用字典对数据进行单循环的版本(它不知道某项在打印时出现的总次数,但有时仅知道倍数就足够了。)
set a [list str1/str2 str3/str4 str3/str4 str5/str6]
# Make sure that the dictionary doesn't exist ahead of time!
unset -nocomplain counters
foreach item $a {
if {[dict incr counters $item] == 2} {
puts "$item appears several times"
}
}
答案 1 :(得分:0)
我想您可以使用数组来做类似的事情,因为数组具有唯一的键:
set a [list str1/str2 str3/str4 str3/str4 str5/str6]
foreach x $a {
incr arr($x) ;# basically counting each occurrence
}
foreach {key val} [array get arr] {
if {$val > 1} {puts "$key appears $val times"}
}