Linux 如何根据TCL中的lindex值对不同列表进行排序
如何根据lindex值对不同列表进行排序请帮助我 Qstn: 假设我有一个数组变量调用x 设置$x(1)“4 5 7” 设置$x(2)“1 3 9” 设置$x(3)“9 1 5” 我想按照列表中第一个元素的排序顺序对数组进行排序 lindex$x(2)0Linux 如何根据TCL中的lindex值对不同列表进行排序,linux,shell,scripting,tcl,Linux,Shell,Scripting,Tcl,如何根据lindex值对不同列表进行排序请帮助我 Qstn: 假设我有一个数组变量调用x 设置$x(1)“4 5 7” 设置$x(2)“1 3 9” 设置$x(3)“9 1 5” 我想按照列表中第一个元素的排序顺序对数组进行排序 lindex$x(2)0
set x(1) "4 5 7"
set x(2) "1 3 9"
set x(3) "9 1 5"
set l [array get x]
puts $l
set sorted [lsort -stride 2 -index 1 $l]
puts $sorted
foreach {k v} $sorted {
lappend result $k
}
puts $result
% tclsh8.6 sort.tcl
1 {4 5 7} 2 {1 3 9} 3 {9 1 5}
2 {1 3 9} 1 {4 5 7} 3 {9 1 5}
2 1 3
希望有帮助;)
编辑:8.6之前的代码
foreach {k v} [array get x] {
lappend unsorted [list $k [lindex $v 0]]
}
puts $unsorted
set sorted [lsort -index 1 $unsorted]
puts $sorted
foreach i $sorted {
lappend result [lindex $i 0]
}
puts $result
希望有帮助;)
编辑:8.6之前的代码
foreach {k v} [array get x] {
lappend unsorted [list $k [lindex $v 0]]
}
puts $unsorted
set sorted [lsort -index 1 $unsorted]
puts $sorted
foreach i $sorted {
lappend result [lindex $i 0]
}
puts $result
@siyb有TCL8.6的答案。对于8.5:
% foreach {key value} [array get x] {lappend y [list $key $value]}
% set y
{1 {4 5 7}} {2 {1 3 9}} {3 {9 1 5}}
% lsort -index {1 0} $y
{2 {1 3 9}} {1 {4 5 7}} {3 {9 1 5}}
% foreach elem [lsort -index {1 0} $y] {lappend sorted_keys [lindex $elem 0]}
% set sorted_keys
2 1 3
@siyb有TCL8.6的答案。对于8.5:
% foreach {key value} [array get x] {lappend y [list $key $value]}
% set y
{1 {4 5 7}} {2 {1 3 9}} {3 {9 1 5}}
% lsort -index {1 0} $y
{2 {1 3 9}} {1 {4 5 7}} {3 {9 1 5}}
% foreach elem [lsort -index {1 0} $y] {lappend sorted_keys [lindex $elem 0]}
% set sorted_keys
2 1 3