Как получить конкретный список из какого-то списка (tcl) - PullRequest
0 голосов
/ 12 января 2019

Я новичок в Tcl. Список {A1 b} {A2 b} {A3 c} {A4 b}.

Я хочу получить определенный отсортированный список. -> {A1 b} {A3 c} => A1, A2, A4 связаны с b. Среди этого все в порядке.

Я хотел бы знать, как решить эту проблему. Пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Еще один дубль: 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}}
0 голосов
/ 12 января 2019

Мне кажется, что вы ищете опции -index и -unique для lsort:

set list {{A1 b} {A2 b} {A3 c} {A4 b}}
puts [lsort -index 1 -unique $list]

Что приводит к: {A4 b} {A3 c}

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