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

时间:2017-04-11 12:02:45

标签: c# entity-framework linq

我需要使用LINQ获得10位数的非重复字母数字字符。我搜索了很多谷歌。但我无法找到它。请帮我解决问题。感谢

2 个答案:

答案 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>