是否有一种惯用的方式来交换单元格数组中的两个元素?

时间:2014-09-08 11:16:01

标签: arrays matlab cell-array

我知道我可以这样写:

tmp = arr{i}
arr{i} = arr{j}
arr{j} = tmp

但是有更简单的方法吗?例如,在Python中我会写:

arr[i], arr[j] = arr[j], arr[i]

2 个答案:

答案 0 :(得分:8)

标准,惯用的方式

使用索引向量:

arr([i j]) = arr([j i]); %// arr can be any array type

无论arr是单元数组,数值数组还是字符串(char数组),这都有效。


不推荐(但可能):

如果您想使用与Python类似的语法(使用元素列表而不是索引向量),则需要deal函数。但结果语句更复杂,并且取决于arr是单元格数组还是标准数组。因此不推荐(用于交换两个元素)。我只是为了完整性而包含它:

[arr{i}, arr{j}] = deal(arr{j}, arr{i}); %// for a cell array
[arr(i), arr(j)] = deal(arr(j), arr(i)); %// for a numeric or char array

答案 1 :(得分:2)

不要混淆事情,但让我另一种语法:

[arr{[i,j]}] = arr{[j,i]};

[arr{i},arr{j}] = arr{[j,i]};

这里的想法是使用带有花括号索引的comma-separated lists

请记住,在处理单元格数组时,() - 索引会为您提供sliced单元格数组,而{} - 索引会从单元格数组中提取元素并返回返回类型是存储在指定单元格中的任何内容(当索引是非标量时,MATLAB将每个单元格内容单独返回为逗号分隔列表)。