假设我有一个这样的列表:curl -X GET 'https://detail.1688.com/offer/535394058500.html?spm=b26110380.sw1688.mof001.302.6YIDM0' -H 'cache-control: no-cache' -H 'content-type: application/x-www-form-urlencoded' -H 'postman-token: 2b11da6f-dcde-d527-289c-bfbf8a85d30c'
并且我想创建一个由每个嵌套列表的第一个元素组成的新列表:String[] name = "abcd2qwer3yuiop".split("\\d+",2);
System.out.println(name.length); // gives 2
System.out.println(name[0]); // gives abcd -- length=4
System.out.println(name[1]); // gives qwer3yuiop -- length=10
。我知道如何使用' foreach'在几行中做到这一点,但这是一种更优雅的方式,还是更好的内置功能呢?
答案 0 :(得分:5)
如果您使用的是Tcl 8.6,那么lmap
命令会对列表进行映射,并可用于您的任务:
%set a {{1 2 3} {4 5 6} {7 8 9}}
{1 2 3} {4 5 6} {7 8 9}
%lmap x $a {lindex $x 0}
1 4 7
lmap
命令遍历列表$a
,将当前处理的列表项分配给给定变量(示例中为x
)并调用命令(lindex $x 0
例如)。
答案 1 :(得分:1)
如您所知,您想要搜索第一个元素,这是您使用foreach
的最佳解决方案。复杂性将在你的情况下O(1)。因为您只需要访问固定索引的第一个值。
答案 2 :(得分:0)
作为使用[lmap]
/ [lindex]
的替代方法,将问题重新公式化为平坦但常规的列表。也就是说,accessing the nth (1st, 2nd, ...) element在对列表的输入列表进行展平之后:
set a {{1 2 3} {4 5 6} {7 8 9}}
set A [concat {*}$a]; # flattened list: {1 2 3 4 5 6 7 8 9}
lmap {pick drop drop} $A {set pick}
但是,根据输入列表的布局,[lmap]
/ [lindex]
策略可能会超过上述条件。