我是有关tcl的初学者。 列表为{A1 b} {A2 b} {A3 c} {A4 b}。
我想获取特定的排序列表。 -> {A1 b} {A3 c} => A1,A2,A4与b相关。在这之中,一切正常。
我想知道如何解决这个问题。 请让我知道。
答案 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}}