我想使用索引将元素添加到数组中。
array_in = [1 5 6 8 9];
index = [2 4];
newElements = [25 67];
index = index + (0:length(index)-1);
预期产出:
array_out = [1 25 5 6 67 8 9];
1.使用循环:
tmp = array_in;
for idx = 1:length(index)
array_out = cat(2,tmp(1:index(idx)-1),newElements(idx),tmp(index(idx):end));
tmp = array_out;
end
2.使用句柄调用函数的代码:
fcn_Insert = @(a, x, n) cat(2, x(1:n-1), a, x(n:end));
array_out = fcn_Insert(newElements,array_in,index)
上面的代码.2(功能)不起作用?可以任何人建议解决方案。还有其他更好的解决方案吗?
答案 0 :(得分:2)
这是基于sort
的方法:
array_out = [array_in newElements]; %// append new to old
[~, ind] = sort([1:numel(array_in) index-.5]); %// determine new order needed
array_out = array_out(ind); %// apply that order
答案 1 :(得分:1)
在Luis的回答被接受之前,我正在努力解决这个问题。如果人们感兴趣,它的速度会快两倍。
function array_out = Insert(array_in, index, values)
array_out = zeros(length(array_in)+length(index), 1);
oldIndex = ~ismember(1:length(array_out), index);
array_out(index) = values;
array_out(oldIndex) = array_in;
end