比较结构C#

时间:2015-11-30 18:34:21

标签: c# variables structure

我想要做的是比较结构中的两个相同变量。 例如,我有一个像这样的结构:

    struct player
    {
        public string name;
        public int number;

    }
    static player[] players = new player[3];

我想要做的是比较数字,这样如果两个玩家的数字相同,就会发生一些事情。

这是我试过的,但总会说两个数字是相同的,因为它会比较两个相同的

  for (int i = 0; i < length; i++)
        {
           for (int j = 0; j < length; j++)
            {
                if (players[i].number == players[j].number)
                {
                    Console.WriteLine("Same");
                    Console.ReadLine();
                }
                else
                {
                    Console.WriteLine("Not");
                    Console.ReadLine();
                }
            }

希望你明白我的意思。 任何帮助将非常感激! 感谢

3 个答案:

答案 0 :(得分:3)

问题在于循环变量ij从索引零开始。然后,您将元素零与元素零进行比较,因此条件为真。

更新此行:

 for (int j = 0; j < length; j++)

到此:

 for (int j = i + 1; j < length; j++)

修改

更准确。条件的评估结果不仅适用于第一个元素,而且适用于ij相同时的每个元素。该解决方案禁止控制变量在任何迭代中具有相同的值。

答案 1 :(得分:1)

简单,只需添加一项检查以确保您没有比较相同的索引,因为这是同一个对象:

for (int i = 0; i < length; i++)
{
    for (int j = 0; j < length; j++)
    {
        if (i == j) continue;

        if (players[i].number == players[j].number)
        {
            Console.WriteLine("Same");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Not");
            Console.ReadLine();
        }
    }

答案 2 :(得分:-2)

使用类,并使用Linq:

执行
public class Player
{
public string Name { get; set; }
public int Number { get; set; }
}

然后在其他类中有这种方法来交叉检查

    private void Match()
{
    var players = new Player[3].ToList();

    foreach (var found in players.ToList().Select(player => players.FirstOrDefault(p => p.Number == player.Number)))
    {
        if (found != null)
        {
            Console.WriteLine("Same");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Not");
            Console.ReadLine();
        }
    }
}