Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在这种情况下,如何在不重复的情况下显示结果?:)_C#_Random_Names - Fatal编程技术网

C# 在这种情况下,如何在不重复的情况下显示结果?:)

C# 在这种情况下,如何在不重复的情况下显示结果?:),c#,random,names,C#,Random,Names,描述一个婴儿的水平,我是如此初学者 static void Main(string[] args) { string[] Names = { "Erik", "Levente", "Noel", "Áron", "Krisztián", "Kristóf", "Bence", "Roland", "Máté", "László", "Bálint" , "Regina", "Brigitta", "Gréta", "Hédi", "Hanna", "Boglárka", "Jáz

描述一个婴儿的水平,我是如此初学者

static void Main(string[] args)
{
    string[] Names = { "Erik", "Levente", "Noel", "Áron", "Krisztián", "Kristóf", "Bence", "Roland", "Máté", "László", "Bálint" ,
    "Regina", "Brigitta", "Gréta", "Hédi", "Hanna", "Boglárka", "Jázmin", "Réka", "Alexandra", "Rebeka", "Lili", "Luca", "Zsófi"};          

    List<string> alreadyUsed = new List<string>();
    Random r = new Random();
    while (alreadyUsed.Count < Names.Length)
    {
        int index = r.Next(0, Names.Length);
        if (!alreadyUsed.Contains(Names[index]))
            alreadyUsed.Add(Names[index]);
        Console.WriteLine("The 1st Winner is:  " + Names[r.Next(0, Names.Length - 1)]);
    }

    Console.ReadKey(true);
}
static void Main(字符串[]args)
{
string[]name={“Erik”、“Levente”、“Noel”、“Áron”、“Kristián”、“Kristóf”、“Bence”、“Roland”、“Máté”、“László”、“Bálint”,
“里贾娜”、“布里吉塔”、“格里塔”、“赫迪”、“汉娜”、“波哥拉卡”、“贾兹敏”、“雷卡”、“亚历山德拉”、“丽贝卡”、“莉莉”、“卢卡”、“兹索菲”};
List alreadyUsed=新列表();
随机r=新随机();
while(alreadyUsed.Count
如果您只想在不复制的情况下显示结果,请尝试:

while (alreadyUsed.Count < Names.Length)
{
    int index = r.Next(0, Names.Length);
    if (!alreadyUsed.Contains(Names[index]))
    {
        alreadyUsed.Add(Names[index]);
        Console.WriteLine("The 1st Winner is:  " + Names[index]);
    }
}
while(alreadyUsed.Count

请注意,在
Console.WriteLine
中,我使用的是当前添加的项
Names[index]
,而不是
Names[r.Next(0,Names.Length-1)]

可能此版本增加了一些可读性:

while (alreadyUsed.Count < Names.Length)
{
    var notUsedYet = Names.Except(alreadyUsed).ToArray();
    var index = r.Next(0, notUsedYet.Length);
    alreadyUsed.Add(notUsedYet[index]);
    Console.WriteLine("The 1st Winner is:  " + notUsedYet[index]);
}
while(alreadyUsed.Count
您的实际问题是否可能重复?代码的作用是什么?您希望得到什么?小心,您用一个随机数填充
索引
,但在
控制台中。WriteLine
会生成另一个随机数。这就是你想要做的吗?难道你不认为随机洗牌数组是一种更有效的方法,效果也一样吗?@fubo你的意思是
Names.OrderBy(x=>r.Next()).ToArray()?我想是的,但OP只是询问显示结果而不重复,所以我保持原样