在名册C#中重复出现字符时遇到问题

时间:2018-03-30 06:12:37

标签: c#

列出了15个角色名称以及在我的玩家列表中记录这些名字的玩家。我需要从名册中分配2个5人队伍,我很难理解如何在没有重复出现的角色的情况下做到这一点。

ProjectSchema

1 个答案:

答案 0 :(得分:1)

我会做什么Sami建议并创建一个shuffle方法。从列表中删除会导致偏差(请参阅Fisher Yates进行说明)。

创建一个Shufflie方法(我没有写这个但是已经将它用于其他项目):

public static List<T> Shuffle<T>(this IList<T> list)
{
    Random rng = new Random();
    int n = list.Count;
    while (n > 1)
    {
        n--;
        int k = rng.Next(n + 1);
        T value = list[k];
        list[k] = list[n];
        list[n] = value;
     }

     return (List<T>)list;
}

大大简化您的代码:

var names = new List<string>();
/* add your names  */
names.Shuffle();

var team1 = names.Take(5);
var team2 = names.Skip(5).Take(5);