Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查数组中的多个值是否等于一个字符串?_C#_Arrays_Winforms - Fatal编程技术网

C# 如何检查数组中的多个值是否等于一个字符串?

C# 如何检查数组中的多个值是否等于一个字符串?,c#,arrays,winforms,C#,Arrays,Winforms,因此,我在学习C#的同时,为自己制作了一个X和O的游戏作为一个小项目,我想知道如何检查数组中的某些值是否等于一个字符串 因此,我将网格上的所有值存储在一个名为gridValues[]的数组中,我正在创建一个方法来检查某人在一次尝试后是否有一个值。那么,如何检查gridValues[0]、gridValues[1]和gridValues[2](最上面一行)是否都等于“X” 还有更简单的方法来检查所有的组合吗?要将三个数组元素与给定值进行比较,可以通过多种方法来完成,但最简单的方法可能是简单地构建二

因此,我在学习C#的同时,为自己制作了一个X和O的游戏作为一个小项目,我想知道如何检查数组中的某些值是否等于一个字符串

因此,我将网格上的所有值存储在一个名为
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