[英]How do I generate a random alphanumeric array that has 3 letter and 6 digits in c#?
I am trying to generate a random alphanumeric array that consist of 3 letters and 6 digits. 我正在尝试生成一个由3个字母和6个数字组成的随机字母数字数组。 The entire array must be random.
整个数组必须是随机的。 The only way I could think of is generating 2 individual random arrays and then merging them and randomizing the merged array.
我能想到的唯一方法是生成2个单独的随机数组,然后合并它们并随机化合并的数组。 Any help would be appreciated.
任何帮助,将不胜感激。 I specifically need help on ensuring that the correct number of variable types are stored.
我特别需要帮助确保存储正确数量的变量类型。 Here is my semi-working code:
这是我的半工作代码:
static void Main(string[] args)
{
var alphabetic = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numeric = "0123456789";
var stringChars = new char[9];
var random = new Random();
for (int i = 0; i < 3; i++)
{
stringChars[i] = alphabetic[random.Next(alphabetic.Length)];
}
for(int i = 3; i< stringChars.Length; i++)
{
stringChars[i] = numeric[random.Next(numeric.Length)];
}
var ranChars = new char[9];
var semisorted = new String(stringChars);
for (int i=0; i< ranChars.Length; i++)
{
ranChars[i] = semisorted[random.Next(semisorted.Length)];
}
var final = new string(ranChars);
Console.WriteLine("{0}", final);
Console.ReadLine();
}
You're close. 你很亲密 But the problem here is that you're selecting randomly from the "semi-sorted" array, while what's really necessary at that point is picking a random permutation.
但问题在于你是从“半分类”数组中随机选择的,而那时真正需要的是选择一个随机排列。 One way to do that is with a Fisher-Yates shuffle .
一种方法是使用Fisher-Yates shuffle 。
So combining that with the code you had that worked: (not tested) 所以将它与你工作的代码相结合:(未经测试)
for (int i = 0; i < 3; i++)
{
stringChars[i] = alphabetic[random.Next(alphabetic.Length)];
}
for(int i = 3; i< stringChars.Length; i++)
{
stringChars[i] = numeric[random.Next(numeric.Length)];
}
int n = stringChars.Length;
while (n > 1)
{
int k = random.Next(n--);
char temp = stringChars[n];
stringChars[n] = stringChars[k];
stringChars[k] = temp;
}
string result = new string(stringChars);
Harold's answer is way cleaner, but here's another approach for the whole '100 ways to do the same thing in programming' concept. 哈罗德的答案更清晰,但这是另外一种方法,用于整个'100种方法在编程中做同样的事情'的概念。 [Edit: Doh, I reversed the number of digits and letters.
[编辑:Doh,我颠倒了数字和字母的数量。 Here's a fix:]
这是一个修复:]
public static void Main(string[] args)
{
var random = new Random();
var finalString = string.Empty;
var finalArray = new string[9];
for (var i = 0; i < 3; i++)
{
var alphabet = random.Next(0, 26);
var letter = (char) ('a' + alphabet);
finalArray[i] = letter.ToString().ToUpper();
}
for (var i = 3; i < 9; i++)
{
var number = random.Next(0, 9);
finalArray[i] = number.ToString();
}
var shuffleArray = finalArray.OrderBy(x => random.Next()).ToArray();
for (var i = 0; i < finalArray.Length; i++)
{
finalString += shuffleArray[i];
}
Console.WriteLine(finalString);
Console.ReadKey();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.