如何在不重复的情况下获取数组元素的所有可能组合

How to get all possible combinations of array elements without duplicate

我有一个字符串元素向量 vector = {'A','B','C'}
我想生成数组三个元素的所有可能组合但不重复。
我希望得到以下结果:{'A', 'B', 'C', 'AB', 'AC', 'BC', 'ABC'}.
我如何在 MATLAB 中做到这一点?

从你想要的结果来看,你想要所有的组合有'A''B''C'''(无)两种选择。你可以用 nchoosek 做如下

result = nchoosek(' ABC', 2) % note space for empty

输出

result =
  6×2 char array
    ' A'
    ' B'
    ' C'
    'AB'
    'AC'
    'BC'

然后删除空格并将组合转换为元胞数组:

result = strrep(cellstr(result), ' ', '')

正如 Wolfie 所指出的,这仅适用于单字符输入,对于多字符输入,我们可以使用字符串数组而不是字符数组:

result = nchoosek(["","A1","B2","C3"], 2);
result = result(:,1) +  result(:,2) % string cat
% result = cellstr(result); % optional if want cell output
result = 
  6×1 string array
    "A1"
    "B2"
    "C3"
    "A1B2"
    "A1C3"
    "B2C3"