我想遍历一个充满字符串的单元格数组,然后在另一个函数调用中使用这些字符串。像这样:
flavorDb = containers.Map();
flavorDb('banana') = 'awful';
flavorDb('lemon') = 'sour';
flavorDb('orange') = 'delicious';
for fruit = {'banana' 'lemon' 'orange'}
disp([fruit ' is ' flavorDb(fruit)]);
end
打印输出中可疑的语法; flavorDb
中查找的结果如下:
Specified key type does not match the type expected for this container.
这是因为变量fruit
包含{'banana'}
而不是'banana'
。有什么更好的方法呢?
答案 0 :(得分:3)
即使我发现你不喜欢香蕉离开,我也愿意帮助你:
flavorDb = containers.Map();
flavorDb('banana') = 'awful';
flavorDb('lemon') = 'sour';
flavorDb('orange') = 'delicious';
for fruit = flavorDb.keys %instead of {'banana' 'lemon' 'orange'}
disp([cell2mat(fruit) ' is ' flavorDb(cell2mat(fruit))]);
end
当你从单元格中取出字符串时,就足够了。或者你必须选择整个细胞构建
fruit = flavorDb.keys;
for i = 1:length(fruit)
disp([fruit{i} ' is ' flavorDb(fruit{i})]);
end
答案 1 :(得分:2)
这可以通过多种方式实现。根据如何进一步增加代码的复杂性,这些可能都是合适的。
for
迭代器并解压缩每个结果disp([fruit{:} ' is ' flavorDb(fruit{:})]);
或
disp([fruit{1} ' is ' flavorDb(fruit{1})]);
for
迭代器并索引到单元格数组fruit = {'banana' 'lemon' 'orange'};
for iFruit = 1:numel(fruit)
disp([fruit{iFruit} ' is ' flavorDb(fruit{iFruit})]);
end
cellfun
迭代数组元素cellfun(@(fruit) disp([fruit ' is ' flavorDb(fruit)]), {'banana' 'lemon' 'orange'});
values
方法将containers.Map
对象映射到与输入形状相同的数组fruit = {'banana' 'lemon' 'orange'};
output = [fruit; flavorDb.values(fruit)];
fprintf('%s is %s\n', output{:});
答案 2 :(得分:1)
disp([fruit{:} ' is ' flavorDb(fruit{:})]);
循环中的应该可以解决问题。 {:}
解包fruit
(“uncells”)。