我的很多循环看起来像这样:
items = [3,14,15,92];
for item_i = 1:numel(items)
item = items(item_i);
% ...
end
Run Code Online (Sandbox Code Playgroud)
这对我来说有点乱.是否有一些循环结构让我循环遍历项目并同时携带索引?
我正在寻找一种符合for item_i as item = items或的语法for [item_i item] = items.
与克里斯泰勒的答案类似,你可以这样做:
function [ output ] = Enumerate( items )
output = struct('Index',num2cell(1:length(items)),'Value',num2cell(items));
end
items = [3,14,15,92];
for item = Enumerate(items)
item.Index
item.Value
end
Run Code Online (Sandbox Code Playgroud)
枚举函数需要更多的工作才能成为通用目的,但这是一个开始,并且适用于您的示例.
这对于小向量是可以的,但是你不希望用任何大小的向量来做这个,因为性能会是一个问题.
我相信没有办法做到这一点.我已经在过去使用的技巧是利用这一点Matlab的循环通过这样的事实列的矩阵,那么你可以定义一个函数enumerate,增加了索引列的矩阵的顶部:
function output = enumerate(x)
output = [1:size(x,2); x];
end
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
for tmp = enumerate(items)
index = tmp(1);
item = tmp(2:end);
end
Run Code Online (Sandbox Code Playgroud)
但这并不比你原来做的更好.如果像Python那样你可以这么好
for [index,item] = enumerate(items)
# loop body
end
Run Code Online (Sandbox Code Playgroud)
where enumerate函数返回两个相同长度的矩阵,但是......你不能.