假设我有值向量v = 1:3
,
我希望将矢量值分配给变量a=1, b=2, c=3
。
使用[a, b, c] = deal(v)
a=b=c=[1 2 3]
结果a=v(1), b=v(2), c=v(3)
尝试这样做。
除了显而易见的{{1}}?
之外,有没有人知道这样做的任何内容?答案 0 :(得分:1)
不是一个单行(我确定那里有一个!),但是这里有一个你可以添加到你的MATLAB路径的功能,似乎做了正确的事情:
function varargout = deal2 ( inputVec )
for i = 1:nargout
varargout{i} = inputVec(i);
end
end
使用此:
>> [a, b, c] = deal2([1 200 10])
a =
1
b =
200
c =
10
如果输出的数量小于或等于输入矢量的长度,这将适用于任何长度的输入矢量和输出数量。
答案 1 :(得分:1)
不是一个单行,但接近。
% Convert v to be a cell array, with each element in a different cell.
v = 1:3;
v2 = arrayfun(@(x) x, v, 'UniformOutput', false)
% Assign each cell to a different variable
[a, b, c] = v2{:}