【发布时间】:2016-08-29 12:07:32
【问题描述】:
假设我在 Matlab 中有以下 struct(从 JSON 文件中读取):
>>fs.
fs.dichte fs.hoehe fs.ts2
fs.temperatur fs.ts3 fs.viskositaet
fs.ts1 fs.ts4
每个fs.ts* 组件都包含另一个struct。在这种特殊情况下,ts 的索引从 1 变为 4,但在另一种情况下,它也可能是 2 或 7。你明白了吗?我希望程序足够灵活以处理任何可能的输入。
所以我的问题归结为:如何查询ts的最大索引?
在理想的世界中,这会起作用:
who fs.ts*
但不幸的是,它什么也没返回。有什么想法吗?
(顺便说一句,我使用的是 Octave,没有可用于测试的 Matlab;但是,确实应该有一个适用于这两种环境的解决方案。)
【问题讨论】:
-
不是您确切问题的答案,但听起来您应该有一个带有列表的
ts字段而不是tsN字段。提示:每次在变量或字段名称中看到数字时,请考虑是否不应该使用向量/数组/列表。 -
好主意;我使用 JSON 的时间很短,所以我没有想到那个解决方案。所以我用一个名为
ts的对象数组替换了我的四个tsN。它被loadjson正确解析。但是我怎样才能访问子结构呢?fs.ts(1)工作并输出包含更多变量的结构,例如laenge和hoehe。但是fs.ts(1).laenge给出:error: cell cannot be indexed with . -
从元胞数组中索引元素时需要使用大括号。如果你使用括号,那么你会得到一个单元数组切片。所以使用
fs.ts{N},它返回元胞数组的元素N,而不是fs.ts(N),它返回一个元素为N的元胞数组。 -
对,这样就可以了。为什么我自己没有想到呢? :-s 让我感到困惑的是,虽然
fieldnames(fs.ts{1})呈现正确的结果,但自动完成在这里不起作用,所以如果我在交互式提示符下键入fs.ts{1}.并按 TAB,变量不会列出(输出给出./ ../ .nargin.)。这还没有在 Octave GUI 中实现,还是普遍缺乏语言? Matlab 的行为方式是否相同? -
Octave 依赖于 readline 来自动完成。您的建议是对 Octaves readline 配置的可能改进。请在Octave bug tracker建议。
标签: regex matlab struct octave matlab-struct