比较结构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();
}
}
希望你能理解我的意思。任何帮助都将不胜感激!感谢
问题在于循环变量i
和j
都从索引0开始。然后将元素0与元素0进行比较,因此条件为true。
更新此行:
for (int j = 0; j < length; j++)
到此:
for (int j = i + 1; j < length; j++)
编辑
更准确地说当i
和j
相同时,条件不仅对第一个元素求值为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();
}
}
}