如何在matlab中选择和连接任意数量的字符串?
函数如何在matlab中选择和连接任意数量的字符串?,matlab,Matlab,函数output\u cellstrings=choose\u and\u combine(varargin)可以接受任意数量的单元格字符串输入。输入的数量和每个单元格字符串数组的长度是任意的 每次我们从每个单元格数组中选择一个元素,并将它们连接起来,生成一个字符串作为输出单元格字符串的元素。输出包括所有可能的组合 如果我们有k输入,且其长度为n1,n2,…,nk,则输出单元格字符串的长度将为n1*n2*…*nk 结果应该是, >> choose_and_combine({'a1',
output\u cellstrings=choose\u and\u combine(varargin)
可以接受任意数量的单元格字符串输入。输入的数量和每个单元格字符串数组的长度是任意的
每次我们从每个单元格数组中选择一个元素,并将它们连接起来,生成一个字符串作为输出单元格字符串的元素。输出包括所有可能的组合
如果我们有k
输入,且其长度为n1
,n2
,…,nk
,则输出单元格字符串的长度将为n1*n2*…*nk
结果应该是,
>> choose_and_combine({'a1','a2'},{'b1'})
'a1b1' 'a2b1'
>> choose_and_combine({'a1','a2'},{'b1'},{'c1','c2'})
'a1b1c1' 'a1b1c2' 'a2b1c1' 'a2b1c2'
>> choose_and_combine({'a1','a2'},{'b1','b2','b3'},{'c1','c2'})
'a1b1c1' 'a1b1c2' 'a1b2c1' 'a1b2c2' 'a1b3c1' 'a1b3c2' 'a2b1c1' 'a2b1c2' 'a2b2c1' 'a2b2c2' 'a2b3c1' 'a2b3c2'
似乎您正在尝试创建这些字符串单元格数组的笛卡尔积,即以所有可能的方式组合它们,从每个输入中提取一个字符串 下面的函数可以实现这一点。字符串的结果顺序与示例中略有不同,但我认为这不是问题:
function out = choose_and_combine(varargin)
indices = cellfun(@(x) 1:length(x), varargin, 'uni', false);
[cartProdIdx{1:length(varargin)}] = ndgrid(indices{:});
combinations = cellfun(@(strs,idx) reshape(strs(idx(:)),[],1), varargin, cartProdIdx, 'uni', false);
out = strcat(combinations{:})';
end
>> choose_and_combine({'a1','a2'},{'b1'},{'c1','c2'})
ans =
'a1b1c1' 'a2b1c1' 'a1b1c2' 'a2b1c2'
>> choose_and_combine({'a1','a2'},{'b1'})
ans =
'a1b1' 'a2b1'
似乎您正在尝试创建这些字符串单元格数组的笛卡尔积,即以所有可能的方式组合它们,从每个输入中提取一个字符串 下面的函数可以实现这一点。字符串的结果顺序与示例中略有不同,但我认为这不是问题:
function out = choose_and_combine(varargin)
indices = cellfun(@(x) 1:length(x), varargin, 'uni', false);
[cartProdIdx{1:length(varargin)}] = ndgrid(indices{:});
combinations = cellfun(@(strs,idx) reshape(strs(idx(:)),[],1), varargin, cartProdIdx, 'uni', false);
out = strcat(combinations{:})';
end
>> choose_and_combine({'a1','a2'},{'b1'},{'c1','c2'})
ans =
'a1b1c1' 'a2b1c1' 'a1b1c2' 'a2b1c2'
>> choose_and_combine({'a1','a2'},{'b1'})
ans =
'a1b1' 'a2b1'
为了记录在案,另一种可能的解决方案(使用):
为了记录在案,另一种可能的解决方案(使用):
我们需要更多的信息。你试着做什么?那么当你有{'a1'、'a2'、'a3'}、{'b1'、'b2'}和{'c1'、'c2'}时会发生什么呢?@GameOfThrows所有可能的组合。@Jørgen我认为第一篇文章中的简单例子已经足够清楚了。看来我过于乐观了。有些人知道,有些人不知道。即使有好的答案,问题怎么会因为不清楚而被搁置?我们需要更多的信息。你试着做什么?那么当你有{'a1'、'a2'、'a3'}、{'b1'、'b2'}和{'c1'、'c2'}时会发生什么呢?@GameOfThrows所有可能的组合。@Jørgen我认为第一篇文章中的简单例子已经足够清楚了。看来我过于乐观了。有些人知道,有些人不知道。即使有好的答案,一个问题怎么会因为不清楚而被搁置?为什么它被称为“笛卡尔产品”?维基百科:是的,看起来是一样的想法。感谢您提供的信息。同时也感谢动态varargout。我不知道那是怎么回事。为什么它叫笛卡尔积?维基百科:是的,看起来是一样的。感谢您提供的信息。同时也感谢动态varargout。我不知道那条路。