从Tcl中的列表中删除重复的元素

时间:2013-12-04 10:35:38

标签: tcl

如何从Tcl列表中删除重复元素说:

list is like [this,that,when,what,when,how]

我使用Google搜索并找到了lsort unique,但同样对我不起作用。我想从列表中删除。

4 个答案:

答案 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]
        }
    }
}

`