Tho*_*eld 6 c# linq lambda .net-3.5
我有一个
List<String> MyList=new List<string>();
Run Code Online (Sandbox Code Playgroud)
我需要MyList用n值填充列表.
如果n的值为2,则列表MyList将包含
"A","B"
Run Code Online (Sandbox Code Playgroud)
如果10那么
"A","B","C"....."J"
Run Code Online (Sandbox Code Playgroud)
如果30那么
"A"....."Z","AA","AB",AC","AD"
Run Code Online (Sandbox Code Playgroud)
如果1000那么
"A",....."Z","AA","AB"......"AZ","BA","BB"......."BZ"........"YZ","AAA",AAB".....
and so on
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做.
请帮助我使用任何方法使用LINQ或执行此操作 LAMBDA Expression
编辑2:
这可能是实现它的最简单方法.我测试过,它工作正常.您可以生成无限数量的字符串.
public IEnumerable<string> GenerateStrings()
{
foreach(string character in Alphabet())
{
yield return character;
}
foreach (string prefix in GenerateStrings())
{
foreach(string suffix in Alphabet())
{
yield return prefix + suffix;
}
}
}
public IEnumerable<string> Alphabet()
{
for(int i = 0; i < 26; i++)
{
yield return ((char)('A' + i)).ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
我之前写过的东西:
您还可以编写一个小的递归函数,它通过某个索引返回任何字符串.这可能不是最佳的性能,因为存在一些重复的划分,但它可能足够快以达到您的目的.
这很简单:
string GetString(int index)
{
if (index < 26)
{
return ((char)('A' + index)).ToString();
}
return GetString(index / 26 - 1) + GetString(index % 26);
}
Run Code Online (Sandbox Code Playgroud)
用法(也可以用于另一种方法:
List<string> strings = Enumerable.Range(0, 1000)
.Select(x => GetString(x))
.ToList();
Run Code Online (Sandbox Code Playgroud)
这是工作代码,只是为它编写了一个测试.
编辑:例如,GetString的"完整linq方式"应用程序:
public void IEnumerale<string> GenerateStrings()
{
int index = 0;
// generate "infinit" number of values ...
while (true)
{
// ignoring index == int.MaxValue
yield return GetString(index++);
}
}
List<string> strings = GenerateStrings().Take(1000).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4021 次 |
| 最近记录: |