Matlab中如何在元胞数组的指定位置插入元素?
刚好做过类似的操作,给你分享几个在Matlab里给元胞数组指定位置插入元素的实用方法,针对你这个场景完全适用:
方法1:直接切片拼接(最直观通用)
这是最基础也容易理解的方式,把原数组拆成「插入位置前的部分」「要插入的元素」「插入位置后的部分」,再横向拼接起来:
a = {'a', 'b', 'c', 'd'}; insert_pos = 3; % 要插入的目标位置 new_str = '1'; a = [a(1:insert_pos-1), {new_str}, a(insert_pos:end)];
运行后a就会变成{'a', 'b', '1', 'c', 'd'}。这里要注意:单个字符串必须放在**元胞括号{}**里,不然会被Matlab当成字符数组拆分成单个字符元素,这点很容易踩坑。
方法2:用
insertAfter函数(Matlab R2019b+可用) 如果你用的是较新版本的Matlab(R2019b及以后),可以用官方提供的insertAfter函数,写法更简洁:
a = {'a', 'b', 'c', 'd'}; a = insertAfter(a, 2, '1'); % 第二个参数是「插入位置的前一个元素索引」
因为要插在第3位,也就是原数组第2个元素的后面,所以这里传2就行,结果和方法1完全一致。
方法3:
cat函数拼接(和方法1原理一致) 和切片拼接逻辑相同,只是用cat函数实现横向拼接,效果一样:
a = {'a', 'b', 'c', 'd'}; insert_pos = 3; a = cat(2, a(1:insert_pos-1), {'1'}, a(insert_pos:end));
cat(2, ...)代表横向拼接,和直接用方括号[]的作用等价。
另外补充个小细节:如果要插在数组开头(位置1),a(1:0)会返回空元胞数组,直接用[{new_str}, a]就行;如果插在末尾(位置length(a)+1),用[a, {new_str}]即可,上面的方法都能自动适配这些边界情况,不用额外加判断。
内容的提问来源于stack exchange,提问作者Jepessen
相关产品推荐
相关产品推荐

