gpt4 book ai didi

c# - 如何使用递归按设定顺序获取字符串的每个组合?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:13 24 4
gpt4 key购买 nike

这个问题与我之前在这里问的问题有关:

How do I get every combination of letters using yield return and recursion?

我有几个这样的字符串列表,来自几十个可能的列表:

1: { "A", "B", "C" }
2: { "1", "2", "3" }
3: { "D", "E", "F" }

这三个只是作为示例选择的,用户可以从几十个具有不同元素数量的类似列表中进行选择。再举一个例子,这对用户来说也是一个完全有效的选择:

25: { } // empty
4: { "%", "!", "$", "@" }
16: { "I", "a", "b", "Y" }
8: { ")", "z", "!", "8" }

我想要做的是在保持列表“顺序”的同时获取所有可能的字符串组合。换句话说,假设我们正在查看第一个列表,第一个组合将是 A1D,然后是 A1E,然后是 A1F,然后是 B1D,然后是 B1E,依此类推。根据我之前提出的问题中提供的答案,我编写了这个有效的递归算法:

public void Tester()
{
var collection = new List { list1, list2, list3 };
var answer = GetStringCombinations(collection).ToList();

answer.ForEach(Console.WriteLine);
}

private IEnumerable<string> GetStringCombinations(List<List<string>> collection)
{
// if the collection is empty, return null to stop the recursion
if (!collection.Any())
{
yield return null;
}
// recurse down the list, selecting one letter each time
else
{
foreach (var letter in collection.First())
{
// get the collection sans the first item
var nextCollection = collection.Skip(1).ToList();

// construct the strings using yield return and recursion
foreach (var tail in GetStringCombinations(nextCollection))
{
yield return letter + tail;
}
}
}
}

但是,此代码依赖于yield return 才能正常工作。如果不使用 yield return 关键字,您将如何实现此算法,例如,如果我要将代码移植到 ColdFusion 或 Ruby(假设它们也没有类似的关键字)?

最佳答案

我没有测试过,但应该可以用

private List<string> GetStringCombinations(List<List<string>> collection)
{
List<string> ls = new List<string>();

// if the collection is empty, return null to stop the recursion
if (!collection.Any())
{
return null;
}
// recurse down the list, selecting one letter each time
else
{
foreach (var letter in collection.First())
{
// get the collection sans the first item
var nextCollection = collection.Skip(1).ToList();

// construct the strings using yield return and recursion
foreach (var tail in GetStringCombinations(nextCollection))
{
ls.add(letter + tail);
}
}
}
return ls;

关于c# - 如何使用递归按设定顺序获取字符串的每个组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com