#list #sorting #tcl
#Список #сортировка #tcl
Вопрос:
Итак, у меня есть строка, которая обрабатывается как список, когда я разделяю их в n, и она выглядит так:
{aaaa2,bbbb2,cccccc,dddddn aaaa3,bbbb4,cccccc,dddddn aaaa4,bbbb1,cccccc,dddddn aaaa5,bbbb3,cccccc,ddddd}
Мне нужно изменить порядок этого списка на основе столбца B таким образом, чтобы меньшее значение было первым, а равные значения оставались вместе. Это означает, что это должно быть что-то вроде этого:
{aaaa4,bbbb1,cccccc,dddddn aaaa2,bbbb2,cccccc,dddddn aaaa5,bbbb3,cccccc,dddddn aaaa3,bbbb4,cccccc,ddddd}
Как я могу это сделать?
Ответ №1:
Если вы разделите каждый элемент своего списка на сам список, вы можете использовать lsort
-index
опцию ‘s:
set lst {aaaa2,bbbb2,cccccc,ddddd
aaaa3,bbbb4,cccccc,ddddd
aaaa4,bbbb1,cccccc,ddddd
aaaa5,bbbb3,cccccc,ddddd}
set lst [lmap item $lst { split $item , }]
set lst [lsort -index 1 $lst]
puts [join [lmap sublist $lst { join $sublist , }] n]
выведет
aaaa4,bbbb1,cccccc,ddddd
aaaa2,bbbb2,cccccc,ddddd
aaaa5,bbbb3,cccccc,ddddd
aaaa3,bbbb4,cccccc,ddddd
Комментарии:
1. Отличное использование
lmap
. Хорошая симметрия в разделении и объединении.2. Вот почему
lmap
был добавлен; это значительно упрощает подобные задачи.