C# 比较具有相同字段的两个不同对象列表
我有一个C# 比较具有相同字段的两个不同对象列表,c#,algorithm,unity3d,comparison,C#,Algorithm,Unity3d,Comparison,我有一个 class Player { public Vector3 position; public String name; } 和 class Field { public Vector3 position; public bool isTarget; } 我有一个3人的游戏,10个场地和3个目标场地。为了获胜,用户应该将所有玩家放在目标场上。是否有一种比较两个不同对象列表(列表和列表)但具有相同场(位置)的好方法 或者我应该继承球员和场地吗 cla
class Player
{
public Vector3 position;
public String name;
}
和
class Field
{
public Vector3 position;
public bool isTarget;
}
我有一个3人的游戏,10个场地和3个目标场地。为了获胜,用户应该将所有玩家放在目标场上。是否有一种比较两个不同对象列表(列表<玩家>和列表<场>)但具有相同场(位置)的好方法
或者我应该继承球员和场地吗
class BaseItem
{
public Vector3 position;
}
class Player : BaseItem
{
public String name;
}
并比较列表
编辑:只是添加一些澄清:我有一个列表var listPlayer = new List<Player>();
listPlayer.Add(new Player { position = new Vector3(1,0,0); name = "a"; }
listPlayer.Add(new Player { position = new Vector3(0,1,0); name = "b"; }
listPlayer.Add(new Player { position = new Vector3(0,0,1); name = "c"; }
var listFields = new List<Field>();
listFields.Add(new Field { position = new Vector3(1,0,0); isTarget = true;}
listFields.Add(new Field { position = new Vector3(0,1,0); isTarget = true;}
listFields.Add(new Field { position = new Vector3(0,0,1); isTarget = true;}
listFields.Add(new Field { position = new Vector3(1,1,0); }
listFields.Add(new Field { position = new Vector3(1,0,1); }
****
不确定比较两种不同事物是否是正确的方法。 但是,您可以从基类派生这两件事:
internal class BoardEntity {
public Vector3 Position { get; set; }
}
internal class Player : BoardEntity {
public string Name { get; set; }
}
internal class Field : BoardEntity {
public bool IsTarget { get; set; }
}
现在还有其他事情出现:
- 你每次都得把它们扔到基础课上,这会让时间变得无聊
- 比较两件不同的东西是很奇怪的,即使它们拥有相同的财产
- 不鼓励比较
,因为结果可能(将)是浮动
ComparePosition()
方法听起来更自然,因为我们转换为整数,所以比较总是正确的
internal class BoardEntity {
public Vector3 Position { get; set; }
public bool ComparePosition(BoardEntity boardEntity) {
var v1 = new Vector3(boardEntity.Position.X, boardEntity.Position.Y, boardEntity.Position.Z);
var v2 = new Vector3(Position.X, Position.Y, Position.Z);
return v1.Equals(v2);
}
}
internal class MyClass {
public MyClass() {
var player = new Player();
var field = new Field();
bool comparePosition = player.ComparePosition(field);
}
}
我不明白。请解释得更清楚些?你能发布一个你想要实现的伪代码吗?同样也不清楚你所说的“但具有相同的字段(位置)”是什么意思?列举球员列表,在列举字段列表中,然后比较球员和字段位置。根据您的需要而有所不同。@SriramSakthivel更新了一个question@LearnCocos2D让我们只关注一个最简单的案例。我想看看如何检查规则“每个玩家都应该有一个对应的字段(istarget==true和field.position==player.position)”是否满足。使用IEquatable和LINQ Intersect。您好,谢谢您的回答。不必担心浮点比较——我说的是更一般的:如何比较不同对象的相似字段。我只是觉得这不是一个天真的解决方案。继承基本对象似乎很好,但也许我可以实现比较的Player.Equals(Field)方法?实际上,你的建议似乎是合理的。
internal class BoardEntity {
public Vector3 Position { get; set; }
protected bool Equals(BoardEntity other) {
return Position.Equals(other.Position);
}
public override bool Equals(object obj) {
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
var other = obj as BoardEntity;
return other != null && Equals(other);
}
public override int GetHashCode() {
return Position.GetHashCode();
}
}
internal class MyClass {
public MyClass() {
var player = new Player();
var field = new Field();
BoardEntity boardEntity1 = player;
BoardEntity boardEntity2 = field;
bool b = boardEntity1.Equals(boardEntity2);
}
}
internal class BoardEntity {
public Vector3 Position { get; set; }
public bool ComparePosition(BoardEntity boardEntity) {
var v1 = new Vector3(boardEntity.Position.X, boardEntity.Position.Y, boardEntity.Position.Z);
var v2 = new Vector3(Position.X, Position.Y, Position.Z);
return v1.Equals(v2);
}
}
internal class MyClass {
public MyClass() {
var player = new Player();
var field = new Field();
bool comparePosition = player.ComparePosition(field);
}
}