如何在tcl脚本中对列表列表进行分组

时间:2019-04-15 08:27:09

标签: tcl grouping

我有一个唯一ID列表,一个员工ID的子列表,如下所示:

5 {9 6} 
6 {9 5} 
14 {} 
1 {8 2} 
17 18 
18 17 
2 {8 1} 
8 {2 1} 
27 {} 
4 {11 3} 
3 {11 4} 
7 11 
11 {3 4 7} 
9 {6 5} 
22 {}

我正在尝试按如下所示将它们分组:

{3 4 7 11} 
{5 6 9} 
{1 2 8} 
{17 18} 
14 
27 
22

根本不知道该怎么做。希望有人可以帮忙。

1 个答案:

答案 0 :(得分:1)

您应该遍历源列表并执行所需的操作。例如:

set dest [list]
foreach { id sub_ids } $src_list {

    set found -1
    set ids [concat $sub_ids [list $id]]

    for { set i 0 } { $i < [llength $dest] } { incr i } {
        set dest_rec [lindex $dest $i]
        foreach { dest_id } $dest_rec {
            if { $dest_id in $ids } {
                set found $i
                break
            }
        }
        if { $found != -1 } {
            break
        }
    }

    if { $found == -1 } {
        lappend dest [lsort -unique $ids]
    } else {
        set dest [lreplace $dest $found $found [lsort -unique [concat [lindex $dest $found] $ids]]]
    }

}