如何在迭代单元格数组时解压缩结果?

时间:2016-09-02 12:47:32

标签: matlab

我想遍历一个充满字符串的单元格数组,然后在另一个函数调用中使用这些字符串。像这样:

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'。有什么更好的方法呢?

3 个答案:

答案 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”)。