如何在不重复的情况下配对这个数组的内容?
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();
【讨论】:
以上是关于如何在不重复的情况下配对这个数组的内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)
PostgreSQL,如何在不创建重复项的情况下将数组更新为现有数组?