如何实现两个多维数组String[,]的全可能配对及通配匹配?
解决多维数组球员-球队配对问题
我来帮你搞定这个球员和球队的配对需求,核心就是根据球员的联赛标签(包括通配符*)匹配合法的球队,生成所有可能的组合。先把规则再理清楚:
- 普通联赛标签的球员:只能效力于对应联赛的球队(比如德甲球员只能去拜仁慕尼黑,西甲球员可以去皇马或巴萨)
- 带
*标记的球员:可以效力于所有列出的球队
代码实现(C#)
假设我们的playerPairs数组已经补全(比如包含球员姓名和对应的联赛/标记),可以用下面的逻辑来生成所有合法配对:
using System; using System.Collections.Generic; class Program { static void Main() { // 定义球队-联赛配对数组 String[,] leaguePairs = new String[3, 2] { { "Bayern Munich", "Bundesliga" }, { "Real Madrid", "La Liga" }, { "FC Barcelona", "La Liga" } }; // 示例球员-联赛/标记配对数组 String[,] playerPairs = new String[4, 2] { { "Thomas Müller", "Bundesliga" }, { "Karim Benzema", "La Liga" }, { "Lionel Messi", "*" }, { "Manuel Neuer", "Bundesliga" } }; // 存储所有合法配对 List<Tuple<string, string>> validPairs = new List<Tuple<string, string>>(); // 遍历每个球员 for (int i = 0; i < playerPairs.GetLength(0); i++) { string playerName = playerPairs[i, 0]; string playerLeague = playerPairs[i, 1]; if (playerLeague == "*") { // 通配符球员:匹配所有球队 for (int j = 0; j < leaguePairs.GetLength(0); j++) { string teamName = leaguePairs[j, 0]; validPairs.Add(Tuple.Create(playerName, teamName)); } } else { // 普通联赛球员:匹配对应联赛的球队 for (int j = 0; j < leaguePairs.GetLength(0); j++) { string teamName = leaguePairs[j, 0]; string teamLeague = leaguePairs[j, 1]; if (teamLeague == playerLeague) { validPairs.Add(Tuple.Create(playerName, teamName)); } } } } // 输出所有配对 Console.WriteLine("所有合法球员-球队配对:"); foreach (var pair in validPairs) { Console.WriteLine($"{pair.Item1} → {pair.Item2}"); } } }
代码说明
- 遍历逻辑:先逐个处理每个球员,根据其联赛标签分支处理
- 通配符处理:如果球员标签是
*,直接遍历所有球队生成配对 - 联赛匹配:普通球员则筛选出
leaguePairs中同联赛的球队,再生成配对 - 结果存储:用
List<Tuple<string, string>>来存储所有合法组合,你也可以自定义一个PlayerTeamPair类来让结构更清晰
示例输出
运行上面的代码会得到以下结果:
所有合法球员-球队配对: Thomas Müller → Bayern Munich Karim Benzema → Real Madrid Karim Benzema → FC Barcelona Lionel Messi → Bayern Munich Lionel Messi → Real Madrid Lionel Messi → FC Barcelona Manuel Neuer → Bayern Munich
内容的提问来源于stack exchange,提问作者Jacman
相关产品推荐
相关产品推荐

