как сгруппировать список списка в скрипте tcl

#tcl #grouping

#tcl #группировка

Вопрос:

у меня есть список уникальных идентификаторов, подсписок идентификаторов партнеров, например:

 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. Что вы уже пробовали до сих пор?

2. я попытался объединить список в единый список следующим образом: {5 9 6} {6 9 5} 14 foreach a $t1 { foreach {id assid} $a { lappend assid $id установить assid1 [lsort -уникальный $assid] если {[lsearch $t2 $assid1]==-1} { добавить t2 [список $assid1] } установить assid {} } }

3. Вы должны добавить это в качестве редактирования к своему вопросу вместо комментариев.

Ответ №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]]]
    }

}
 

Комментарии:

1. похоже, мое подтверждение слишком рано. github.com/chaujohnthan/test001/blob/master/as1.txt

2. похоже, сейчас он работает. Спасибо. github.com/chaujohnthan/test001/blob/master/td.tcl