как удалить emty элементы из списка tcl - PullRequest
4 голосов
/ 10 марта 2011

привет, у меня есть следующий список.{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}}{{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}}{{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}}}

Я хочу удалить все пустые элементы.так как список списка я не могу сделать это в единственном цикле.

Есть ли простой способ добиться этого?

Ответы [ 4 ]

3 голосов
/ 10 марта 2011

В этом списке нет пустых элементов. Те, которые кажутся пустыми, могут рассматриваться как (а) строка «{}» или (б) список с одним элементом, который является пустой строкой или пустым списком.

package require struct::list
set non_empty [struct::list filter \
                 [struct::list flatten $qprList] \
                 {apply {{x} {expr {[string length $x] > 0}}}} \
              ]
2 голосов
/ 18 мая 2017

Вы также можете попробовать это:

set listwithoutnulls [lsearch -all -inline -not -exact $listwithnulls {}]

Не требует включения пакета.Он также может быть повторно применен.

1 голос
/ 16 апреля 2015

Исходя из вики Tclers (http://wiki.tcl.tk/440):

Чтобы свести список:

concat {*}$nested

Может применяться несколько раз:

proc flatten data { concat {*}$data }

set a {{a {b c}} {d {e f}}} ; # {a {b c}} {d {e f}} flatten $a ; # a {b c} d {e f} flatten [flatten $a] ; # a b c d e f

0 голосов
/ 11 марта 2011

Я также использую struct :: list, потому что я ленивый:

package require struct::list
set non_empty [struct::list flatten -full $qprList]
...