arrays - 如何使用循环变量创建二维 TCL 数组?
问题描述
我正在尝试生成三角形映射以确定它们如何相互连接。为此,我需要将任何三角形的索引存储到一个数组中(对我来说,数组比列表更清晰)。问题是三角形数组有两个维度;第一个是单元格编号,第二个是指向索引的指针,共有三个。因此,一个单元格的典型声明是:
array set tris {
1,1 23
1,2 25
1,3 34
}
在打印 23 时执行puts $tris(1,1)
结果。但是,我想使用循环结构来抽象单元格编号,foreach
例如:
foreach cell {1 2 3 4 5} {
set indices [$dom getCell $cell]
array set tris {
$cell,1 [lindex indices 0]
$cell,2 [lindex indices 1]
$cell,3 [lindex indices 2]
}
}
在这个循环中,[$dom getCell $cell]
是一个 Pointwise 命令,它返回定义三角形的索引列表,在本例中是$cell
第 th 个三角形。当我这样做并检查 的内容时$cells(2,1)
,我收到一条错误消息,指出无法读取 "cells(2,1)": no such element in array。根据 的返回值[$dom getCell $cell]
,我得到23 25 34
第一个单元格进行检查;所以这是正确的。但是检查数组内容表明我没有正确地做某事。我错过了什么或做错了什么?
解决方案
你可以写这个
foreach cell {1 2 3 4 5} {
set indices [$dom getCell $cell]
set tris($cell,1) [lindex $indices 0]
set tris($cell,2) [lindex $indices 1]
set tris($cell,3) [lindex $indices 2]
}
或者
foreach cell {1 2 3 4 5} {
lassign [$dom getCell $cell] tris($cell,1) tris($cell,2) tris($cell,3)
}
或者
foreach cell {1 2 3 4 5} {
set j 0
foreach elem [$dom getCell $cell] {
set tris($cell,[incr j]) $elem
}
}
推荐阅读
- mysql - MySql如何在顶部显示特定行,然后在其下方显示剩余行
- python - 如何将 PyQt5 QTableView 的verticalHeader 移动到右侧?
- objective-c - How to find method, linked to NSButton?
- c - How to send Sysrq programmatically over serial and is CONFIG_MAGIC_SYSRQ_SERIAL required
- java - Unlikely argument type for equals(): String seems to be unrelated to MemberSearchRequest
- ionic5 - RazorpayCheckout is not defined
- java - Check if the number in string object is between range java 8
- amazon-web-services - Lifecycle Policy Not Deleting Deleted Object Permanently On AWS S3 bucket
- java - java 程序(带有 txt/csv)在 IDE 中可以正常工作,但不能在 jar 中
- find - find -cmin 0 和 -ctime 0 的规则