[英]How do I check if one list contains 2 elements of another list with more elements?
[英]How do I know if elements from one list appear in another?
我需要知道C#中的一种有效方法,以确定listX中的元素是否出现在listY中。 我可以通过编写很多循环以(可能)低效率的方式来完成此操作,但我想有一种必须更快的方式(lambda表达式?)
我正在从Java跳到C#,所以很多事情对我来说都是新的。 我正在写井字游戏,并有7个场景可以赢得游戏。
private int[] scenarioA = {1, 2, 3};
private int[] scenarioB = {4, 5, 6};
private int[] scenarioC = {7, 8, 9};
private int[] scenarioD = {3, 5, 7};
private int[] scenarioE = {1, 4, 7};
private int[] scenarioF = {2, 5, 8};
private int[] scenarioG = {3, 6, 9};
每当玩家按下按钮时,我都会将单元格的编号保存在clickedCellsO或ClickedCellsX中。 击中5个单元格后,我需要检查是否有获胜者,因此我需要遍历clickedCellsO或ClickedCellsX以查看其是否具有方案之一的组合。
List<int> clickedCellsO = new List<int>();
List<int> clickedCellsX = new List<int>();
有人可以给我一个建议,而无需使用长凳循环吗?
提前致谢
您可以只使用LINQ:
var winningConditions = new[] {
scenarioA,
scenarioB,
scenarioC,
// ...
};
var hasPlayerOWon = winningConditions.Any(placements => placements.All(clickedCellsO.Contains));
var hasPlayerXWon = winningConditions.Any(placements => placements.All(clickedCellsX.Contains));
您可以使用List<List<int>>
来存储获胜组合,然后检查使用某些System.Linq
方法来确定玩家的组合是否包含获胜组合中Any()
项目的All()
。
以下方法中的代码基本上说: “如果任何获胜组合中的所有项目都包含在玩家的组合中,则返回true,否则返回false” 。
private static readonly List<List<int>> WinningCombinations = new List<List<int>>
{
new List<int> {1, 2, 3}, new List<int> {1, 5, 9},
new List<int> {1, 4, 7}, new List<int> {2, 5, 8},
new List<int> {3, 5, 7}, new List<int> {3, 6, 9},
new List<int> {4, 5, 6}, new List<int> {7, 8, 9},
};
private static bool IsAWinner(List<int> playerCombination)
{
return WinningCombinations.Any(winningCombo =>
winningCombo.All(playerCombination.Contains));
}
在使用中,您可能会执行以下操作:
if (IsAWinner(clickedCellsX))
{
// Player 'X' wins!
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.