如何从某个列表(tcl)获取特定列表

时间:2019-01-12 08:42:14

标签: list tcl

我是有关tcl的初学者。 列表为{A1 b} {A2 b} {A3 c} {A4 b}。

我想获取特定的排序列表。 -> {A1 b} {A3 c} => A1,A2,A4与b相关。在这之中,一切正常。

我想知道如何解决这个问题。 请让我知道。

2 个答案:

答案 0 :(得分:2)

在我看来,您正在寻找lsort的-index和-unique选项:

set list {{A1 b} {A2 b} {A3 c} {A4 b}}
puts [lsort -index 1 -unique $list]

结果为:{A4 b} {A3 c}

答案 1 :(得分:0)

另一种方法:groupby

proc groupby {list func} {
    set result [dict create]
    foreach element $list {
        set key [apply $func $element]
        dict lappend result $key $element
    }
    return $result
}

这需要一个列表和一个函数(请参见apply命令)并返回一个字典,该字典的键是函数结果,值是具有该结果的元素的列表:

set list {{A1 b} {A2 b} {A3 c} {A4 b}}
set grouped [groupby $list {pair {lindex $pair end}}]

此时,$grouped字典的值为b {{A1 b} {A2 b} {A4 b}} c {{A3 c}},因此我们可以:

set wanted [lmap group [dict values $grouped] {lindex $group 0}] ;# => {{A1 b} {A3 c}}