如何在不重复的情况下配对这个数组的内容?

Posted

技术标签:

【中文标题】如何在不重复的情况下配对这个数组的内容?【英文标题】:How can I pair the contents of this array without repeating itself? 【发布时间】:2019-05-31 14:04:12 【问题描述】:

我正在尝试制作一个秘密圣诞老人代码,以便在运行程序时,它将从数组中获取所有名称并将它们配对。

我已经尝试了很多方法来做到这一点,但它最终只是重复了输出中已经存在的条目。例如:

弗雷德和莎拉

尤瑟夫和凯尔

莎拉和弗雷德

莎拉上来了两次,这不好。 这是起始代码,我当然是先随机化数组,但不知道之后要做什么。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp27

class Program

    static void Main(string[] args)
    
        Random random = new Random();
        String[] students = "Fred","Mary","Yusef","Kyle","Sophie", "Lydia", "Max", "Donald","Yasmin","Archie";
        string[] shuffleStudents = students.OrderBy(x => random.Next()).ToArray();



    


有什么想法,有人可以帮忙吗?

我也试过这个,我认为它可以工作,但它返回一个索引超出数组范围的错误

    static void Main(string[] args)
    
        Random random = new Random();
        String[] students =  "Fred", "Mary", "Yusef", "Kyle", "Sophie", "Lydia", "Max", "Donald", "Yasmin", "Archie" ;

        int count = 0;

        for (int i = 0; i < 5; i++)
        
            string[] shuffleStudents = students.OrderBy(x => random.Next()).ToArray();


            Console.Write("0 and 1", shuffleStudents[count], shuffleStudents[count+1]);

            for (int j = 0; j < 5; j++)
            

                count++;
            
        


        Console.Read();

    

【问题讨论】:

这里有很多很好的帖子,展示了如何进行实际、正确的洗牌。 您应该分享您之前的一些失败尝试的代码,以便我们说明问题发生的原因。 @cost 我添加了我的一项尝试 @Ateeb,您是否尝试过生成随机数并将其用作数组的索引? 【参考方案1】:

您可以尝试随机播放它们,然后打印结果。这是我做的代码:

using System;
using System.Linq;

namespace _05_01_19_5am

    class Program
    
        public static void Main()
        
            Random random = new Random();
            String[] students =  "Fred", "Mary", "Yusef", "Kyle", "Sophie", "Lydia", "Max", "Donald", "Yasmin", "Archie" ;

            var shuffleThem = students.OrderBy(s => Guid.NewGuid()).ToArray();

            for (int i = 0; i < 5; i++)
            
            Console.WriteLine(shuffleThem[i] + " + " + shuffleThem[i+5]);
            
        
    

【讨论】:

这实际上不起作用,你应该使用shuffleThem[i+5]而不是shuffleThem[i+1]【参考方案2】:

折腾了一下,找到了解决办法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp27

class Program

    static void Main(string[] args)
    
        Random random = new Random();
        string[] students =  "Fred", "Mary", "Yusef", "Kyle", "Sophie", "Lydia", "Max", "Donald", "Yasmin", "Archie";
        string[] shuffleStudents = students.OrderBy(x => random.Next()).ToArray();

        Console.WriteLine("Your pairs for Secret Santa has been completed!");

        int count = 0;

            for (int j = 0; j < 5; j++)
            

                Console.Write("0 and 1 \n", shuffleStudents[count], shuffleStudents[count+1]);
            for (int i = 0; i < 2; i++)
            
                count++;

            
        


        Console.Read();

    

【讨论】:

以上是关于如何在不重复的情况下配对这个数组的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不知道c中大小的情况下遍历数组[重复]

如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)

PostgreSQL,如何在不创建重复项的情况下将数组更新为现有数组?

如何在不发送任何内容的情况下检查频道是不是已满[重复]

如何在不知道维度的情况下在 C++ 中传递二维数组 [重复]

如何在不使用 Set 的情况下有效地从数组中删除重复项