如何将数组的变量分配给另一个数组

Posted

技术标签:

【中文标题】如何将数组的变量分配给另一个数组【英文标题】:how to apportion array's variables to another arrays 【发布时间】:2020-08-27 09:17:34 【问题描述】:
        string[] cards =  "s1", "s2", "s3","s4","s5","m1", "m2", "m3","m4","m5", "k1", "k2", "k3","k4","k5", "RD", "RD", "RD" ;
        string[] player1 = new string[6];
        string[] player2 = new string[6];
        string[] player3 = new string[6];

嗨,我想将数组的变量分配给 c# 中的另一个数组(随机)。例如:

player1 有 “s2”,”RD”,”m1”,”m2”,”k3”,”s5”

player2 的变量不是 player1 的变量或 player3 的变量。希望你明白我的意思。

那么解决方法是什么?你能解释一下吗?非常感谢。

【问题讨论】:

您的措辞非常令人困惑,但我认为您的意思是您要洗牌并向每位玩家发 6 张牌。您要注意不要意外犯下创建同一张卡的两个或更多实例的错误。对吗? 首先将卡片放入牌组列表中,然后shuffle 牌组。然后你从牌组列表中取出卡片并将它们放入玩家的手牌列表中。你被困在哪里了? 没错,这就是我想要的。我也尝试过不同的方式。我什至无法解释我的方式,但我会尝试你的方式。在开始之前,“甲板清单”是什么意思?对不起,我不是本地人。 贴出你已经尝试过的代码。然后我们可以看到你可能会卡在哪里。 在这种情况下,array 不是正确的数据结构。所以,我所说的“套牌列表”是指List<string>,它对于仍然在套牌中的每张牌都有一个元素。如果您发牌,则将其从代表牌组List<string>中移除,并将其添加到代表玩家手牌的不同List<string>中。 【参考方案1】:

试试这样的:

    static string[] cards =  "s1", "s2", "s3","s4","s5","m1", "m2", "m3","m4","m5", "k1", "k2", "k3","k4","k5", "RD", "RD", "RD" ;
    private static Dictionary<int, string[]> DealTheCards(int numberOfPlayers, int numberOfCardsPerPlayer)
    

        var playerDict = new Dictionary<int, string[]>();
        for(int i = 0; i < numberOfPlayers; i++)
        
            string[] player = new string[numberOfCardsPerPlayer];
            playerDict.Add(i, player);
        

        var cardsList = cards.ToList();
        var cardsNeeded = playerDict.Count() * numberOfCardsPerPlayer;
        if(cardsNeeded > cards.Count())
        
            Console.WriteLine("Not enough Cards");
         
        else
        
            for(int i = 0; i < numberOfCardsPerPlayer; i ++)
            
                foreach(var player in playerDict)
                
                    var rand = new Random();
                    var x = rand.Next(cardsList.Count);
                    var card = cardsList.ElementAt(x);
                    cardsList.Remove(card);
                    player.Value[i] = card;
                
            
        
        return playerDict;
    

此代码更灵活一些。只需从您的代码中调用方法DealTheCards,例如:

    var numberOfPlayer = 3;
    var numberOfCardsPerPlayer = 6;
    var playersCards = DealTheCards(numberOfPlayer, numberOfCardsPerPlayer);

返回对象是一个Dictionary 对象,每个玩家都有一个从零开始的索引(player1 的索引 = 0,player2 的索引 = 1...)

此代码允许您在玩家数量和每个玩家可以拥有的牌张数量方面更加灵活——您只需要确定牌组中有足够的牌张即可分发。

此代码模拟了您在发牌时的预期: 庄家有牌(外圈for)。对于每个玩家,一张牌将被选中(从牌组中移除)并交给玩家。然后下一张牌将被选中(从牌库中移除)并交给下一位玩家......直到所有玩家都收到一张牌,然后我们从第一个玩家开始,再次......直到每个玩家都收到了每个玩家都应该拥有的卡片。


注意:

有人批评Random 在随机化方面有多好。还有其他方法,但这对于您的应用程序来说应该足够了。替换不同的随机化器应该不难。

还有: 方法是static,因为我是为控制台应用程序设置的。

如果您有任何问题,请告诉我。

【讨论】:

以上是关于如何将数组的变量分配给另一个数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个对象数组的一个属性的值分配给另一个对象数组的同名属性? - Javascript

如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?

将一个数组中的值分配给另一个数组而不循环

如何一次循环遍历 2 个数组并将数组中的颜色分配给另一个数组的每个值

Javascript 2对象数组,从一个对象数组中获取一个值并将其分配给另一个对象数组

创建数组的随机切片以分配给另一个对象数组