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

时间:2015-09-26 16:02:36

标签: c# for-loop textbox

enter image description here

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

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

顶部护膝 顶腿支撑 最佳护膝 最佳腿部支撑 猫膝盖支撑 猫腿支撑

取决于输入的文本,我试图生成所有可能的组合,但因为我无法计算逻辑而卡住了。

这是我到目前为止所做的事情

  1. 我创建了3个不同的列表,并将文本框行添加到相应的列表中(列表1包含 - top,best,cat),(list 2包含 - knee,leg)和(list 3包含 - brace)

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

  3. 代码 -

    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;
    

1 个答案:

答案 0 :(得分:3)

在处理未确定的数量(例如,10到100之间的任意数量的元素)时,创建一组尝试 - 每个组合的嵌套循环会变得某种程度上困难。

在你提议的情况下(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]));
        }
    }
}