user2901871
user2901871

Reputation: 219

Remove duplicate elements from list in Tcl

How to remove duplicate element from Tcl list say:

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

I have Googled and have found lsort unique but same is not working for me. I want to remove when from list.

Upvotes: 5

Views: 38336

Answers (4)

Dcode
Dcode

Reputation: 223

Another way, if do not wanna use native lsort function.This is what the interviewer asks :)

`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]
        }
    }
}

`

Upvotes: 0

Hazem
Hazem

Reputation: 107

glenn jackman's answer work perfectly on Tcl 8.6 and above.

For Tcl 8.4 and below (No dict command). You can use:

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]

This will also preserve the order of the elements and this is the result:

this that when what how

Upvotes: 1

glenn jackman
glenn jackman

Reputation: 246774

You could also use an dictionary, where the keys must be unique:

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

That will preserve the order of the elements.

Upvotes: 9

m4eme
m4eme

Reputation: 181

The following works for me

set myList [list this that when what when how]
lsort -unique $myList

this returns

how that this what when

which you could store in a new list

set uniqueList [lsort -unique $myList]

Upvotes: 13

Related Questions