C# 如何检查数组中的多个值是否等于一个字符串?
因此,我在学习C#的同时,为自己制作了一个X和O的游戏作为一个小项目,我想知道如何检查数组中的某些值是否等于一个字符串 因此,我将网格上的所有值存储在一个名为C# 如何检查数组中的多个值是否等于一个字符串?,c#,arrays,winforms,C#,Arrays,Winforms,因此,我在学习C#的同时,为自己制作了一个X和O的游戏作为一个小项目,我想知道如何检查数组中的某些值是否等于一个字符串 因此,我将网格上的所有值存储在一个名为gridValues[]的数组中,我正在创建一个方法来检查某人在一次尝试后是否有一个值。那么,如何检查gridValues[0]、gridValues[1]和gridValues[2](最上面一行)是否都等于“X” 还有更简单的方法来检查所有的组合吗?要将三个数组元素与给定值进行比较,可以通过多种方法来完成,但最简单的方法可能是简单地构建二
gridValues[]
的数组中,我正在创建一个方法来检查某人在一次尝试后是否有一个值。那么,如何检查gridValues[0]
、gridValues[1]
和gridValues[2]
(最上面一行)是否都等于“X”
还有更简单的方法来检查所有的组合吗?要将三个数组元素与给定值进行比较,可以通过多种方法来完成,但最简单的方法可能是简单地构建二进制真值语句,并将其放入
if
语句中:
if (gridValues[0] == 'X' && gridValues[1] == gridValues[0] && gridValues[2] == gridValues[0])
{
/* do something */
}
else
{
/* do something else */
}
也就是说,我不认为我会使用这种方法来解决在3 X 3网格中查找一行中的三个“X”的总体问题。要将三个数组元素与给定值进行比较,可以采用多种方法,但最直接的方法可能是简单地构建二进制真值语句,并将其放入
if
语句中:
if (gridValues[0] == 'X' && gridValues[1] == gridValues[0] && gridValues[2] == gridValues[0])
{
/* do something */
}
else
{
/* do something else */
}
也就是说,我不认为我会使用这种方法来解决在3 X 3网格中查找一行中的三个“X”的总体问题。如果您试图检查一行中是否有三个同一类型的网格,则将网格值存储在3x3 2D数组中可能更容易。2D数组可以让您更轻松地遍历网格。如果您试图检查一行中是否有三种类型的网格,则将网格值存储在3x3 2D数组中可能更容易。2D数组将使您在网格中进行迭代更加容易。我更喜欢这个
{
if(
IsEqual(gridValues, 0,1,2) ||
IsEqual(gridValues, 3,4,5) ||
IsEqual(gridValues, 6,7,8) ||
IsEqual(gridValues, 0,4,8) ||
IsEqual(gridValues, 6,4,2) ||
IsEqual(gridValues, 0,3,6) ||
IsEqual(gridValues, 1,4,7) ||
IsEqual(gridValues, 2,5,8) )
{
/* is done */
}
else
{
/* not equal */
}
}
public static bool IsEqual(string[] A,params int[] index)
{
if(index.Length==0)
return false;
for(int i=1;i<index.Length;i++)
if(A[index[i]]!=A[0])
return false;
return true;
}
{
如果(
等质量(网格值,0,1,2)|
等质量(网格值,3,4,5)|
等质量(网格值,6,7,8)||
等质量(网格值,0,4,8)|
等质量(网格值,6,4,2)|
等质量(网格值,0,3,6)|
等质量(网格值,1,4,7)|
等质量(网格值,2,5,8))
{
/*完成*/
}
其他的
{
/*不相上下*/
}
}
公共静态布尔IsEqual(字符串[]A,参数int[]索引)
{
if(index.Length==0)
返回false;
对于(inti=1;i我更喜欢这个
{
if(
IsEqual(gridValues, 0,1,2) ||
IsEqual(gridValues, 3,4,5) ||
IsEqual(gridValues, 6,7,8) ||
IsEqual(gridValues, 0,4,8) ||
IsEqual(gridValues, 6,4,2) ||
IsEqual(gridValues, 0,3,6) ||
IsEqual(gridValues, 1,4,7) ||
IsEqual(gridValues, 2,5,8) )
{
/* is done */
}
else
{
/* not equal */
}
}
public static bool IsEqual(string[] A,params int[] index)
{
if(index.Length==0)
return false;
for(int i=1;i<index.Length;i++)
if(A[index[i]]!=A[0])
return false;
return true;
}
{
如果(
等质量(网格值,0,1,2)|
等质量(网格值,3,4,5)|
等质量(网格值,6,7,8)||
等质量(网格值,0,4,8)|
等质量(网格值,6,4,2)|
等质量(网格值,0,3,6)|
等质量(网格值,1,4,7)|
等质量(网格值,2,5,8))
{
/*完成*/
}
其他的
{
/*不相上下*/
}
}
公共静态布尔IsEqual(字符串[]A,参数int[]索引)
{
if(index.Length==0)
返回false;
for(int i=1;i如果它们是数组中唯一的值(我的意思是如果数组只包含要比较的值)
您可以在linq中一行完成
以下是一个例子:
string[] arr = { "X", "X", "X" };
var test = arr.All(x => x == "X");
Console.WriteLine(test); // Will return true if all of them is X
否则,可以循环获取第一个值:
for(int i=0;i<3;i++){
if(gridValues[i] != "X")
{
Console.WriteLine("Not equls");
break;
}
}
for(int i=0;i如果它们是数组中唯一的值(我的意思是如果数组只包含要比较的值)
您可以在linq中一行完成
以下是一个例子:
string[] arr = { "X", "X", "X" };
var test = arr.All(x => x == "X");
Console.WriteLine(test); // Will return true if all of them is X
否则,可以循环获取第一个值:
for(int i=0;i<3;i++){
if(gridValues[i] != "X")
{
Console.WriteLine("Not equls");
break;
}
}
for(int i=0;i我建议这样做。首先,我们为数组定义不同的获胜组合。接下来,我们检查每个索引集(获胜组合),得到它们表示为数组的元素。接下来,我们检查第一个项目是否为空或空字符串(即,它是已播放的项目),然后我们检查他们是否都匹配。如果有比赛,这是一场胜利的比赛,我们返回。否则,这是一场失败的比赛,所以我们尝试下一盘。如果失败,我们返回null
这将比单独检查X和O更有效,因为我们只需在一行中查找3个。排除未打印分幅的关键部分是!string.IsNullOrEmpty(元素[0])
用法示例:
public static void Main(string[] args)
{
var testSet = new string[]
{
"X", "O", "O",
"O", "X", "O",
"O", "X", "X"
};
var winner = GetWinner(testSet);
if (winner != null)
{
Console.WriteLine($"{winner} wins!");
}
}
我建议这样做。首先,我们为数组定义不同的获胜组合。接下来,我们检查每个索引集(获胜组合),获得它们表示为数组的元素。接下来,我们检查第一个项目是否为空或空字符串(即,它是播放的项目),然后我们检查他们是否都匹配。如果有比赛,这是一场胜利的比赛,我们返回。否则,这是一场失败的比赛,所以我们尝试下一盘。如果失败,我们返回null
这将比单独检查X和O更有效,因为我们只需在一行中查找3个。排除未打印分幅的关键部分是!string.IsNullOrEmpty(元素[0])
用法示例:
public static void Main(string[] args)
{
var testSet = new string[]
{
"X", "O", "O",
"O", "X", "O",
"O", "X", "X"
};
var winner = GetWinner(testSet);
if (winner != null)
{
Console.WriteLine($"{winner} wins!");
}
}
我已为您删除了visual studio
标记。它仅用于与visual studio本身问题相关的标记,而不是在visual studio中编写的代码。常用标记具有用法说明(有关详细信息,请参阅)为了帮助你决定它们是否适合你的问题。你能展示一下你如何定义你的数组吗?它是1d、2d还是锯齿状的?数组是1d。那么我可以假设0-2代表第一个水平行,3-5代表第二个,6-8代表第三个吗?是的,这是正确的。但是记住你还必须检查垂直和对角线。我已经删除了你的视觉studio
为您标记。它仅用于与Visual Studio本身的问题相关的标记,而不是在Visual Studio中编写的代码。常用标记具有用法说明(请参阅以了解更多信息),以帮助您确定它们是否适合您的问题。您是否可以显示h