总是有强制性的 LINQ 实现。很可能是垃圾性能,但从什么时候开始,性能阻碍了使用很酷的新功能?
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
var sequence = from one in letters
from two in letters
from three in letters
from four in letters
orderby one, two, three, four
select new string(new[] { one, two, three, four });
'sequence' 现在将是一个包含 AAAA 到 ZZZZ 的 IQueryable。
编辑:
好的,所以让我感到困扰的是,应该可以使用 LINQ 使用可配置的字母表制作可配置长度的序列。所以就在这里。再一次,完全没有意义,但它困扰着我。
public void Nonsense()
{
var letters = new[]{"A","B","C","D","E","F",
"G","H","I","J","K","L",
"M","N","O","P","Q","R","S",
"T","U","V","W","X","Y","Z"};
foreach (var val in Sequence(letters, 4))
Console.WriteLine(val);
}
private IQueryable<string> Sequence(string[] alphabet, int size)
{
// create the first level
var sequence = alphabet.AsQueryable();
// add each subsequent level
for (var i = 1; i < size; i++)
sequence = AddLevel(sequence, alphabet);
return from value in sequence
orderby value
select value;
}
private IQueryable<string> AddLevel(IQueryable<string> current, string[] characters)
{
return from one in current
from character in characters
select one + character;
}
对 Sequence 方法的调用生成与以前相同的 AAAA 到 ZZZZ 列表,但现在您可以更改使用的字典以及生成的单词的长度。