如何从Tcl列表中删除重复元素说:
list is like [this,that,when,what,when,how]
我使用Google搜索并找到了lsort unique
,但同样对我不起作用。我想从列表中删除。
答案 0 :(得分:12)
以下为我工作
set myList [list this that when what when how]
lsort -unique $myList
返回
how that this what when
您可以将其存储在新列表中
set uniqueList [lsort -unique $myList]
答案 1 :(得分:6)
您还可以使用字典,其中键必须是唯一的:
set l {this that when what when how}
foreach element $l {dict set tmp $element 1}
set unique [dict keys $tmp]
puts $unique
this that when what how
这将保留元素的顺序。
答案 2 :(得分:1)
glenn jackman的回答完全适用于 Tcl 8.6 及以上。
对于 Tcl 8.4 及以下(无dict命令)。您可以使用:
proc list_unique {list} {
array set included_arr [list]
set unique_list [list]
foreach item $list {
if { ![info exists included_arr($item)] } {
set included_arr($item) ""
lappend unique_list $item
}
}
unset included_arr
return $unique_list
}
set list [list this that when what when how]
set unique [list_unique $list]
这也将保留元素的顺序 这就是结果:
这个怎么样
答案 3 :(得分:0)
另一种方式,如果不想使用原生的lsort函数。这是面试官问的问题:)
`set a "this that when what when how"
for {set i 0} {$i < [llength $a]} {incr i} {
set indices [lsearch -all $a [lindex $a $i]]
foreach index $indices {
if {$index != $i} {
set a [lreplace $a $index $index]
}
}
}
`