gpt4 book ai didi

c# - 循环递归次数作为参数

转载 作者:太空狗 更新时间:2023-10-29 22:09:18 25 4
gpt4 key购买 nike

我正在构建一个字符串列表,其中包含 2 个字母字符串的所有排列,例如“aa”到“zz”。这是我的:

public List<string> SomeMethod(int NumberOfChars) {

for (var i = 0; i < 26; i++)
{
char character1 = (char)(i + 97);
var Letter1 = character1.ToString();

for (var j = 0; j < 26; j++)
{
char character2 = (char)(j + 97);
var Letter2 = character2.ToString();

string TheString = Letter1 + Letter2;
TheList.Add(TheString);
}
}

return TheList;
}

基本上,它是一个循环中的循环,该循环组合了字母表中的字符。现在假设我想包含 NumberOfChars 作为确定每个字符串长度的参数。例如,如果我传入 2,它将返回从 "aa""zz" 的所有 676 个 2 字母字符串,如果我传入 3,它将返回所有 17,576从 "aaa""zzz" 的 3 个字母的字符串。

目前,最简单的方法是使用两种不同的方法,一种返回带有两个嵌套循环的 2 个字母的字符串,另一种返回带有 3 个嵌套循环的 3 个字母的字符串。

执行此操作的更简洁方法是什么?

谢谢。

最佳答案

这样的方法怎么样:

public IEnumerable<string> SomeMethod(int NumberOfChars) 
{
if (NumberOfChars == 0)
{
yield return string.Empty;
}
else
{
for (var i = 'a'; i <= 'z'; i++)
{
foreach (var s in SomeMethod(NumberOfChars - 1))
{
yield return i + s;
}
}
}
}

只是为了好玩,这是另一个使用 Linq 的解决方案:

public IEnumerable<string> SomeMethod(int n) 
{
var r = Enumerable.Range('a', 26).Select(x => ((char)x).ToString());
return (n > 1) ? r.SelectMany(x => SomeMethod(n - 1), (x, y) => x + y) : r;
}

关于c# - 循环递归次数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022987/

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