组合单词并从多个文本框生成变体
Combine Words and Generate Variations From Multiple Textbox
以上是我在用户按下生成时尝试实现的屏幕截图我想按照关键字 1 + 关键字 2 + 关键字 3 的顺序生成所有可能的组合。
在这种情况下,如果用户生成结果的示例应该是
上护膝
顶腿支架
最好的护膝
最好的护腿
猫护膝
猫腿支架
根据输入的文本,我尝试生成所有可能的组合,但由于无法理解逻辑而卡住了。
这是我目前所做的
我创建了 3 个不同的列表并将文本框行添加到它们相应的列表中(列表 1 包含 - 顶部、最佳、猫),(列表 2 包含 - 膝盖、腿)和(列表 3 包含 -大括号)
创建了 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]));
}
}
}
以上是我在用户按下生成时尝试实现的屏幕截图我想按照关键字 1 + 关键字 2 + 关键字 3 的顺序生成所有可能的组合。
在这种情况下,如果用户生成结果的示例应该是
上护膝 顶腿支架 最好的护膝 最好的护腿 猫护膝 猫腿支架
根据输入的文本,我尝试生成所有可能的组合,但由于无法理解逻辑而卡住了。
这是我目前所做的
我创建了 3 个不同的列表并将文本框行添加到它们相应的列表中(列表 1 包含 - 顶部、最佳、猫),(列表 2 包含 - 膝盖、腿)和(列表 3 包含 -大括号)
创建了 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]));
}
}
}