组合单词并从多个文本框生成变体

Combine Words and Generate Variations From Multiple Textbox

以上是我在用户按下生成时尝试实现的屏幕截图我想按照关键字 1 + 关键字 2 + 关键字 3 的顺序生成所有可能的组合。

在这种情况下,如果用户生成结果的示例应该是

上护膝 顶腿支架 最好的护膝 最好的护腿 猫护膝 猫腿支架

根据输入的文本,我尝试生成所有可能的组合,但由于无法理解逻辑而卡住了。

这是我目前所做的

  1. 我创建了 3 个不同的列表并将文本框行添加到它们相应的列表中(列表 1 包含 - 顶部、最佳、猫),(列表 2 包含 - 膝盖、腿)和(列表 3 包含 -大括号)

  2. 创建了 class,它接受三个列表参数并尝试使用 for 循环生成所有可能的组合并最终删除所有重复项但 for 循环逻辑不起作用。

代码-

public List<string> CombineKeywords(List<string> keyword1, List<string> keyword2, List<string> keyword3)
    {
        List<string> combinedKeywords = new List<string>();

        for (int entryKeyword1 = 0; entryKeyword1 < keyword1.Count; entryKeyword1++)
        {
            combinedKeywords.Add(String.Concat(keyword1[entryKeyword1], " ", keyword2[entryKeyword1], " ", keyword3[entryKeyword1]));

            for (int entryKeyword2 = 0; entryKeyword2 < keyword2.Count; entryKeyword2++)
            {
                combinedKeywords.Add(String.Concat(keyword1[entryKeyword1], " ", keyword2[entryKeyword2], " ", keyword3[entryKeyword1]));

                for (int entryKeyword3 = 0; entryKeyword3 < keyword3.Count; entryKeyword3++)
                {
                    combinedKeywords.Add(String.Concat(keyword1[entryKeyword1], " ", keyword2[entryKeyword1], " ", keyword3[entryKeyword3]));
                }
            }
        }

        List<string> uniquecombinedKeywords = combinedKeywords.Distinct().ToList();
        return uniquecombinedKeywords;

在处理未确定的数量(例如,10 到 100 之间的任意数量的元素)时,创建一组 try-every-combination 嵌套循环可能会变得有些困难。

在您提出的情况(3 个变量和 3 个循环)中,您只需要系统地使用索引并记住组合是在最内部循环中创建的。

您的代码的更正版本:

for (int entryKeyword1 = 0; entryKeyword1 < keyword1.Count; entryKeyword1++)
{
    for (int entryKeyword2 = 0; entryKeyword2 < keyword2.Count; entryKeyword2++)
    {
        for (int entryKeyword3 = 0; entryKeyword3 < keyword3.Count; entryKeyword3++)
        {
            combinedKeywords.Add(String.Concat(keyword1[entryKeyword1], " ", keyword2[entryKeyword2], " ", keyword3[entryKeyword3]));
        }
    }
}