【发布时间】:2012-08-14 17:52:49
【问题描述】:
我有一个接受可变参数的函数。这些参数是参数值对,因此varargin 是一个元胞数组,其中每个奇数索引元素都是一个字符串(参数),但偶数索引元素可以是字符串、数字或字符串元胞数组。我想在varargin 中找到特定字符串的索引。我有一个可行的解决方案,但它使用了两次arrayfun;有没有更干净/更快/更有效的方法在这样的单元阵列中找到一个字符串?生成的index 将用于从varargin 中删除该元素和以下元素。我想尽量减少新变量的创建。
str_to_find = 'paramX'
finds = arrayfun(@(i) strfind(varargin{i},str_to_find), 1:length(varargin), 'UniformOutput', 0);
finds2 = arrayfun(@(i) ~iscell(finds{i}) && ~isempty(finds{i}), 1:length(finds));
index = find(finds2==1);
varargin(index)=[];
varargin(index)=[];
假设varargin 是{'paramA', 'valueA', 'paramB', 9, 'paramX', {'z','x','c'},那么finds 是[] [] [] [] [1] {1x3 cell},finds2 是0 0 0 0 1 0,index 是5。所以,我的解决方案可以满足我的需要,但它看起来很丑。我只会使用finds2(即不创建index)从varargin 中删除该元素,但我还需要删除它之后的元素。
【问题讨论】:
标签: matlab cell-array