比较结构C#中的两个变量

本文关键字:两个 变量 结构 比较 | 更新日期: 2023-09-27 18:25:15

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

    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();
                }
            }

希望你能理解我的意思。任何帮助都将不胜感激!感谢

比较结构C#中的两个变量

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

更新此行:

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

到此:

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

编辑

更准确地说ij相同时,条件不仅对第一个元素求值为true,而且对每个元素求值为true。该解决方案禁止两个控制变量在任何迭代中具有相同的值。

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

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();
        }
    }

使用类,并使用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();
        }
    }
}