我需要使用LINQ获得10位数的非重复字母数字字符。我搜索了很多谷歌。但我无法找到它。请帮我解决问题。感谢
答案 0 :(得分:1)
如果您不必使用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);
答案 1 :(得分:0)
这是一个非常有趣的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
。< / p>