Еще один дубль: groupby :
proc groupby {list func} {
set result [dict create]
foreach element $list {
set key [apply $func $element]
dict lappend result $key $element
}
return $result
}
Это берет список и функцию (см. Команду apply ) и возвращает словарь, ключи которого являются результатами функции, а значения - список элементов, которые имели этот результат:
set list {{A1 b} {A2 b} {A3 c} {A4 b}}
set grouped [groupby $list {pair {lindex $pair end}}]
На данный момент словарь $grouped
имеет значение b {{A1 b} {A2 b} {A4 b}} c {{A3 c}}
, поэтому мы можем:
set wanted [lmap group [dict values $grouped] {lindex $group 0}] ;# => {{A1 b} {A3 c}}