#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