【问题标题】:OCTAVE: Checking existence of an element of a cell arrayOCTAVE:检查单元格数组的元素是否存在
【发布时间】:2019-07-21 14:56:51
【问题描述】:

我使用的是 Octave 4.0.0。

我定义了A{1, 1} = 'qwe',但是当我检查A{1, 1} 的存在时,如

 exist("A{1,1}")

exist("A{1,1}", "var")

它返回 0。

如何检查它的存在?

【问题讨论】:

  • 检查这样的元素的存在是没有意义的。检查数组是否存在,以及它的大小是否足以包含该元素
  • 请注意"A{1,1}" 不是一个有效的变量名,所以它不能存在。它是一个语句,而不是一个变量名。
  • @MadPhysicist 好吧,这在我当前的代码中非常有意义;我正在阅读大量文件,然后将它们存储在单元格中并根据它们是否在名称中的某些位置包含某些数字来对它们进行索引。因此,单元格的某些索引有可能保持为空,而单元格本身的存在也无济于事。
  • 您在寻找isempty 函数吗?
  • 取决于他们是否在其名称中的某些位置包含某些数字@HüseyinCanÖnel 在您最后评论“单元格中的文件名...”之后,听起来您正在寻找正则表达式或一些字符串比较/解析函数

标签: octave exists


【解决方案1】:

要检查数组是否有元素 3, 5,您需要验证该数组是否至少有 3 行和 5 列:

all(size(A) >= [3, 5])

您当然可以预先检查变量A 是否存在,并且也是一个元胞数组。一个完整的解决方案可能类似于

function b = is_element(name, varargin)

b = false;

if ~evalin(['exists("' name '")'], 'caller')
    return;
end

if ~strcmp(evalin(['class(' name ')'], 'caller'), 'cell')
    return;
end

if evalin(['ndim(' name ')'], 'caller') ~= nargin - 1
    return;
end

b = all(evalin(['size(' name ')'], 'caller') >= cell2mat(varargin))

endfunction

此函数接受一个变量名和您感兴趣的多维索引。如果对象作为一个具有足够维度和大小以包含所请求元素的元胞数组存在,则它返回 1。

【讨论】:

  • 鉴于您对问题留下的最后评论,我想说这个答案有点不完整。将单元格值的检查合并到我提供的函数中应该没有问题。
  • 在相关说明中,非常欢迎您。正确的感谢方式是通过单击旁边的复选标记来选择答案。
猜你喜欢
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2018-02-23
  • 2012-02-23
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多