所有可能的三到六个不同字符串的排列

Mar*_*ram -1 arrays vb6 algorithm permutation

所有的一切,我一直在墙上撞墙两天.我用google搜索Google搜索,似乎无法找到解决方案.这是我有的:

我有两到六个不同的字符串数组(取决于用户的选择)但是对于这个问题,我们假设有3个单独的字符串数组:

  • Array1 - 汤姆,迪克,哈利
  • Array2 - 吃,厨师,饮料
  • Array3 - 汤,苏打水,沙拉

我希望生成的数组包含这三个字符串数组的所有可能组合,但我不想组合同一列表中包含的值(不是:Tom Dick Harry).这就是我要看的结果数组:


  1. 汤姆吃汤
  2. 汤姆吃苏打水
  3. 汤姆吃沙拉
  4. 迪克吃汤
  5. 迪克吃苏打水
  6. 迪克吃沙拉
  7. 哈利吃汤
  8. 哈利吃苏打水
  9. 哈利吃沙拉

我正在寻找一个VB6解决方案但我很欣赏大多数其他编程语言中的解决方案或算法.

提前感谢您的有用建议.

jas*_*son 5

如果这就是你要做的全部,那就做一个三嵌套for循环:

for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 3; j++) {
         for(int k = 0; k < 3; k++) {
             output array1[i] + " " array2[j] + " " + array3[k]; 
         }  
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以翻译成VB6.像C#和VB.NET这样的现代语言可以让你更精彩地表达它:

string[] names = new[] { "Tom", "Dick", "Harry" };
string[] verbs = new[] { "Eats", "Cooks", "Drinks" };
string[] foods = new[] { "Soup", "Soda", "Salad" };

var combinations = from name in names
                   from verb in verbs
                   from food in foods
                   select String.Join(" ", new[] { name, verb, food });

foreach(var combination in combinations) {
    Console.WriteLine(combination);
}
Run Code Online (Sandbox Code Playgroud)

  • @Mark Kram:很遗憾?有人愿意将你的时间转化为金钱. (3认同)
  • 不是真的,从VB6到.net的转换有一个相当成熟的市场,我不会说这是"技能的侵蚀". (2认同)