C# 如何在C数组字符串中选择5位随机数?

C# 如何在C数组字符串中选择5位随机数?,c#,C#,可能重复: 我有一个以字母命名的数组。现在我需要随机选择5个字符。如果我使用以下代码,我只能选择一个字符。如何随机选择给定数组字符串中的5位数字 当然,给定数组内容,这在功能上等同于: string number = rand.Next(0, 100000).ToString("D5"); 当然,给定数组内容,这在功能上等同于: string number = rand.Next(0, 100000).ToString("D5"); 视情况而定。您想允许同一个数字在选择中多次出现,还是希望

可能重复:

我有一个以字母命名的数组。现在我需要随机选择5个字符。如果我使用以下代码,我只能选择一个字符。如何随机选择给定数组字符串中的5位数字

当然,给定数组内容,这在功能上等同于:

string number = rand.Next(0, 100000).ToString("D5");
当然,给定数组内容,这在功能上等同于:

string number = rand.Next(0, 100000).ToString("D5");


视情况而定。您想允许同一个数字在选择中多次出现,还是希望5个字符是不同的?顺便说一句,您当前的代码将永远不会选择1或任何一个到Q。27个选项中只有9个可能的结果。使用字符[]而不是字符串[]会更有效,因此,您可以避免在构建最终字符串时使用多个字符串concat。或者更好的是,使用单个字符串:string letters=12345…我希望这不是出于安全目的。这取决于。您想允许同一个数字在选择中多次出现,还是希望5个字符是不同的?顺便说一句,您当前的代码将永远不会选择1或任何一个到Q。27个选项中只有9个可能的结果。使用字符[]而不是字符串[]会更有效,因此,您可以避免在构建最终字符串时使用多个字符串concat。或者,更好的是,使用单个字符串:string letters=12345…我希望这不是出于安全目的。问题中的数字包含0-9和a-Q。。。这里显示的两个示例实际上都不起作用!OP在其示例代码中使用了rand.Next1,10;我假设他们只想要0-9,数组的其余部分与这个问题的范围无关。嗯,公平点-我想问题的哪一部分是正确的,哪一部分是错误,正如所写的,问题本身有点矛盾是的,我同意。特别是因为手动构造一个0–9位的随机五字符字符串没有什么意义,当您可以直接使用rand更容易地完成任务时。不,10是独占的,因此它是索引1-9;A不是原始代码中的可能结果问题中的数字包含0-9和A-Q。。。这里显示的两个示例实际上都不起作用!OP在其示例代码中使用了rand.Next1,10;我假设他们只想要0-9,数组的其余部分与这个问题的范围无关。嗯,公平点-我想问题的哪一部分是正确的,哪一部分是错误,正如所写的,问题本身有点矛盾是的,我同意。特别是因为手动构造一个0–9位的随机五字符字符串没有什么意义,当您可以直接使用rand更容易地完成任务时。不,10是独占的,因此它是索引1-9;在原始代码中,A不是可能的结果。您的算法不会两次给出同一个字母。这更像是suffling+1:公平点。这个问题的意图模棱两可。不,这不好。是的,没错,当前的实现在每次访问排序键时都会给出不一致的值。@L.B我认为你的观点是无效的。这不是林克排序。Link将为每个字母只查询一次rand.next,并将其用作排序的键。您的算法不会两次给出同一个字母。这更像是suffling+1:公平点。这个问题的意图模棱两可。不,这不好。是的,没错,当前的实现在每次访问排序键时都会给出不一致的值。@L.B我认为你的观点是无效的。这不是林克排序。Link将只为每个字母查询rand.next一次,并将其用作排序的键。我将把新的随机部分与代码的其余部分分开。我将把新的随机部分与代码的其余部分分开。
string number = 
    string.Concat(Enumerable.Range(0,5).Select(i => 
        letters[rand.Next(0, 10)]));
string number = rand.Next(0, 100000).ToString("D5");
var randomSelection = (from c in letters orderby rand.Next() select c).Take(5);