使用 LINQ 的非重复字母数字 10 位字符



我需要使用 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中。

最新更新