как группировать список списков в сценарии tcl - PullRequest
0 голосов
/ 15 апреля 2019

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

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

1 голос
/ 15 апреля 2019

Вы должны пройти через список источников и выполнить необходимые действия.Например:

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]]]
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...