我需要使用 LINQ 获取 10 位数字的非重复字母数字字符。我搜索了很多谷歌。但我无法找到它。请帮助我获得解决方案。谢谢
如果您不必使用 linq
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var stringChars = new char[10];
var random = new Random();
for (int i = 0; i < stringChars.Length; i++)
{
var randomNumber = random.Next(chars.Length);
stringChars[i] = chars[randomNumber];
chars = chars.Replace(chars[randomNumber].ToString(), "");
}
var finalString = new String(stringChars);
这是一个非常有趣的 LINQ 问题...可能通过使用Aggregate
它是可以解决的......
嗯...... 是...它已经足够邪恶了:
var rnd = new Random();
var chars = "ABCDEFGHIJ0123456789";
var res = Enumerable.Range(0, 10)
.Select(x => rnd.Next(0, chars.Length - x))
.Aggregate(
Tuple.Create(string.Empty, chars),
(prev, ix) => Tuple.Create(
prev.Item1 + prev.Item2[ix],
prev.Item2.Substring(0, ix) + prev.Item2.Substring(ix + 1)
)
).Item1;
通常,在这里使用 LINQ 是错误的,因为每个字符都依赖于前面的所有字符。这在 LINQ 中很复杂。我不得不大量作弊,使用.Aggregate()
并保持所有未使用字符(Item2
(的"状态",并将"响应"字符添加到Item1
中。