gpt4 book ai didi

multidimensional-array - 在 Tcl 中动态创建数组

转载 作者:行者123 更新时间:2023-12-02 01:14:28 26 4
gpt4 key购买 nike

我正在尝试动态填充一个数组,而不是通过运行如下计数器来手动设置它:

set all_list  { <my list>}
set num_pc_a_b 10

for {set i 0 ;set j 0 ; set k 0} {$j < $num_pc_a_b} {incr j; incr i ;incr k} {
array set link_map {[lindex $all_list $i] $j $k 0 }
}

并希望访问如下变量:

foreach {key value value1 value2} [array get link_map] {
puts "key is $key"
puts "value is $value"
puts "value is $value1"
puts "value is $value2"
}

但它不起作用。我在这里做错了什么吗?

最佳答案

我不是很清楚你真正想做什么,所以我会做一些猜测。

无论哪种情况,请注意您对 array set ... 的使用似乎是错误的:此命令采用数组的名称和列表,它将列表解释为交替的键和值,为映射到该键后面的值的每个键在该数组中创建一个条目。您似乎只想在每次迭代中将特定键设置为特定值 — 这是由 set array(key) value 完成的语法。

另请注意,在您的示例中 j , ik变量似乎在每次迭代中都具有相同的值。假设它只是现实世界代码的遗留物,但除此之外只需要一个变量就足够了。

猜一猜:您想将每个键映射到一个值列表。这不会像在您的示例中那样工作,因为在 Tcl 中,数组将每个键映射到一个值;虽然这个值可能是一个列表。如果我的猜测是正确的,要走的路是:

for {set i 0 ;set j 0 ; set k 0} {$j < $num_pc_a_b} {incr j; incr i ;incr k} {
set link_map([lindex $all_list $i]) [list $j $k 0]
}
foreach {key val} [array get link_map] {
foreach {v1 v2 v3} $val break ;# see a note below
puts "key is $key"
puts "value is $v1"
puts "value is $v2"
puts "value is $v3"
}

猜测二:根据您对 foreach 的使用情况判断为了显示,您可能根本不想使用数组,而是使用列表:

set links [list]
for {set i 0 ;set j 0 ; set k 0} {$j < $num_pc_a_b} {incr j; incr i ;incr k} {
lappend links [lindex $all_list $i] $j $k 0
}
foreach {key v1 v2 v3} $links {
puts "key is $key"
puts "value is $v1"
puts "value is $v2"
puts "value is $v3"
}

您也可以不制作一个平面列表,而是制作一个更改键和值的列表,每个值都是一个 [list $j $k 0]。如第一个猜测示例。

更新

猜三个。您将我们的问题标记为 multidimensional-array .我在您的代码片段中看不到任何多维性的痕迹,但如果您真的想要它,Tcl 中通常的范例是使用复合键。例如,如果您想通过 j 的值来键入数组, ik这些变量在每次迭代中都有,使用类似的东西:

for {set i 0 ;set j 0 ; set k 0} {$j < $num_pc_a_b} {incr j; incr i ;incr k} {
set link_map($i,$j,$k) ...
}

这将创建一个使用逗号连接三个值的字符串,并将结果用作键。


foreach ... break的用法分解列表是一个巧妙的技巧,但如果你有 Tcl 8.5 或更高版本,请使用 lassign $list v1 v2 v3相反。

关于multidimensional-array - 在 Tcl 中动态创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com