C#新手求助:如何将扑克手牌字符串数组拆分为两个玩家手牌数组
拆分扑克手牌记录为两个玩家的手牌数组
嘿,作为C#新手能搞定文本文件导入已经迈出了很棒的一步!针对你要拆分玩家1和玩家2手牌的需求,咱们可以用Linq配合字符串分割轻松实现,下面是具体的解决方案:
核心思路
每条记录是空格分隔的10张牌,我们先把每条记录拆成单个牌的数组,再分别提取前5张(玩家1)和后5张(玩家2)的手牌,最后把所有玩家的手牌收集到对应的数组里。
完整代码示例
首先别忘了引用Linq命名空间(因为用到了Take和Skip方法):
using System.Linq; using System.Collections.Generic;
然后处理数组拆分:
// 假设txtImport是你已经导入的字符串数组(包含1000条记录) List<string[]> player1Hands = new List<string[]>(); List<string[]> player2Hands = new List<string[]>(); foreach (string handRecord in txtImport) { // 将单条记录按空格分割成单个牌的数组,同时移除可能的空元素 string[] allCards = handRecord.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); // 做个简单的格式校验,避免无效记录导致出错 if (allCards.Length != 10) { Console.WriteLine($"跳过格式错误的记录:{handRecord}"); continue; } // 提取玩家1的前5张手牌 string[] player1Hand = allCards.Take(5).ToArray(); // 提取玩家2的后5张手牌(跳过前5张后取5张) string[] player2Hand = allCards.Skip(5).Take(5).ToArray(); // 添加到对应的列表中 player1Hands.Add(player1Hand); player2Hands.Add(player2Hand); } // 如果需要把列表转为二维数组(和原始数组结构对应) string[][] player1HandsArray = player1Hands.ToArray(); string[][] player2HandsArray = player2Hands.ToArray();
代码说明
Split方法:把每条记录拆分成单个牌的数组,StringSplitOptions.RemoveEmptyEntries可以避免因为多余空格产生空字符串元素。Take(5):从数组开头取前5个元素,正好是玩家1的手牌。Skip(5).Take(5):先跳过前5个元素,再取接下来的5个,就是玩家2的手牌。- 格式校验:加入长度检查可以避免因记录格式错误导致的程序异常,让代码更健壮。
这样处理后,player1HandsArray和player2HandsArray就分别存储了1000组玩家1和玩家2的手牌,每组都是包含5张牌的字符串数组啦!
内容的提问来源于stack exchange,提问作者Joshua Viggiani
相关产品推荐
相关产品推荐

