我试图混合两个多维数组,这样列表就可以用所有可能的对来表示。例如,属于某一特定联赛(Bundesliga or La Liga)
的球员可以在这些球队中打球,(Bayern Munich, Real Madrid, Or FC Barcelona)
和一个拥有这种(*)
的球员可以在所有的球队中比赛。以下是两个数组:
String[,] leaguePairs = new String[3, 2] { { "Bayern Munich", "Bundesliga" }, { "Real Madrid", "La Liga" }, { "FC Barcelona", "La Liga" } };
String[,] playerPairs = new String[4, 2] { { "Player-1", "Bundesliga" }, { "Player-2", "La Liga" }, { "Player-3", "La Liga" }, { "Player-4", "*" } };
输出:
[Player-2, Real Madrid],
[Player-2, FC Barcelona],
[Player-1, Bayern Munich],
[Player-4, Real Madrid],
[Player-4, FC Barcelona],
[Player-4, Bayern Munich]
我如何表示输出?非常感谢你在这方面的帮助!
发布于 2018-05-08 21:28:16
这段代码应该能用。
String[,] leaguePairs = new String[3, 2] { { "Bayern Munich", "Bundesliga" }, { "Real Madrid", "La Liga" }, { "FC Barcelona", "La Liga" } };
String[,] playerPairs = new String[4, 2] { { "Player-1", "Bundesliga" }, { "Player-2", "La Liga" }, { "Player-3", "La Liga" }, { "Player-4", "*" } };
for (var i = 0; i < leaguePairs.GetLength(0); i++)
{
for (var j = 0; j < playerPairs.GetLength(0); j++)
{
if (Equals(playerPairs[j, 1], leaguePairs[i, 1]) || Equals(playerPairs[j, 1], "*"))
{
Console.WriteLine($@"[{playerPairs[j, 0]}, {leaguePairs[i, 0]}]");
}
}
}
编辑:(2018/5/9 9:58)
这是你想要的方法。
public String[,] MatchPlayers(String[,] leaguePairs, String[,] playerPairs)
{
var results = new List<(string, string)>();
for (var i = 0; i < leaguePairs.GetLength(0); i++)
{
for (var j = 0; j < playerPairs.GetLength(0); j++)
{
if (Equals(playerPairs[j, 1], leaguePairs[i, 1]) || Equals(playerPairs[j, 1], "*"))
{
results.Add((playerPairs[j, 0], leaguePairs[i, 0]);
}
}
}
var stringArray = new String[results.Count, 2];
for (var i = 0; i < results.Count; i++)
{
var result = results[i];
stringArray[i, 0] = result.Item1;
stringArray[i, 1] = result.Item2;
}
return stringArray;
}
发布于 2018-05-08 22:50:33
另一种方法是创建一个查找和可用的团队列表,然后使用这些东西来创建您想要的列表。
var leaguePairs = new String[3, 2] { { "Bayern Munich", "Bundesliga" }, { "Real Madrid", "La Liga" }, { "FC Barcelona", "La Liga" } };
var playerPairs = new String[4, 2] { { "Player-1", "Bundesliga" }, { "Player-2", "La Liga" }, { "Player-3", "La Liga" }, { "Player-4", "*" } };
var lookup = Enumerable.Range(0, leaguePairs.GetLength(0))
.Select(row =>
new {
Key = leaguePairs[row, 1],
Value = leaguePairs[row, 0]
})
.ToLookup(x => x.Key,
x => x.Value);
var teams = Enumerable.Range(0, leaguePairs.GetLength(0))
.Select(row => leaguePairs[row, 0])
.ToHashSet();
var list = Enumerable.Range(0, playerPairs.GetLength(0))
.SelectMany(row =>
playerPairs[row, 1] == "*"
?
teams.Select(team =>
new {
Name = playerPairs[row, 0],
Team = team
})
.ToList()
:
lookup[playerPairs[row, 1]]
.Select(team =>
new {
Name = playerPairs[row, 0],
Team = team
})
.ToList()
).ToList();
https://stackoverflow.com/questions/50242291
复制相似问题