異なるオブジェクトの2つのリストを比較しますが、フィールドは同じです

Vitalii Vasylenko

私は持っています

class Player 
{
    public Vector3 position;
     public String name;
}

class Field
{
    public Vector3 position;
    public bool isTarget;
}

私は3人のプレーヤー、10個のフィールド、3個のターゲットフィールドを持つゲームを持っています。勝つためには、ユーザーはすべてのプレーヤーをターゲットフィールドに配置する必要があります。2つの異なるオブジェクトリスト(List <Player>とList <Field>)を、同じフィールド(位置)で比較するための良い方法はありますか?

または、プレーヤーとフィールドの両方をから継承する必要があります

class BaseItem
{
    public Vector3 position;
}

class Player : BaseItem 
{
    public String name;
}

と比較しList<BaseItem>ますか?

編集:いくつか明確にするために:私はリスト<プレーヤー>とリスト<フィールド>を持っており、すべてのプレーヤーがすべてのisTargetフィールドと同じ位置にあるかどうかを確認したいと思います。順序は関係ありません。

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

すべてのプレーヤーとフィールドを調べて、すべてのプレーヤーに対応するフィールドがあるかどうかを確認するにはどうすればよいですか(同じ位置にあり、isTargetがtrueである必要があります)。


解決策:Aybeの回答を解決策として保持したいのですが、algorytmを終了したので、役立つ場合に備えて共有したいと思います。

private void CheckIfWin()
{
    foreach (var target in gameboardTargets)        
        if (!IsAnyPlayerOnTarget(target))
            return;

    MessageBox.Show(HandleMessage,"You made it!", "Hooray!", MessageBoxButtons.OK);
}


private bool IsAnyPlayerOnTarget(Field target)
{
    foreach (var player in playersList)         
        if (target.GridPosition.Equals(player.GridPosition)) // can be replaced with BaseItem.ComparePosition()
            return true;

    return false;
}
aybe

2つの異なるものを比較することが正しいアプローチであるかどうかはわかりません。

ただし、次の2つを基本クラスから派生させることができます。

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

今、他にも浮上していることがあります。

  • 時間とともに退屈になる可能性があるたびに、それらを基本クラスにキャストする必要があります
  • 同じプロパティを共有していても、2つの異なるものを比較するのは奇妙です
  • floats結果が間違っている可能性があるため、比較はお勧めしません

コード:

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

提案:

ComparePosition()メソッドを提供すると、より自然なIMOに聞こえます。整数にキャストするため、比較は常に正しくなります。

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

異なるクラスの2つのオブジェクトとJavaの比較フィールドでリストをフィルタリングする方法

分類Dev

どのように効率的に同じクラスの2つのオブジェクトを比較し、異なるフィールドであるかをチェックするには?

分類Dev

オブジェクトの2つのフィールドを同じリストに収集する方法は?

分類Dev

Javaで2つのオブジェクトを比較する..各オブジェクトには2つのフィールドがあります

分類Dev

Retrofit / Gsonを使用して、JSONで同じタイプでフィールド名が異なるオブジェクトのリストを逆シリアル化するにはどうすればよいですか?

分類Dev

Qtは2つの異なるスレッドで同じオブジェクトの2つのメソッドを実行します

分類Dev

Django-2つのオブジェクトのフィールドは、外部キーが異なる場合にのみ同じ値を持つことができます

分類Dev

2つの異なるモジュールで、同じモジュールから同じオブジェクトをインポートします。

分類Dev

深い比較:2つのオブジェクトの値が同じでない場合、このコードはどのようにfalseを返しますか?

分類Dev

GSONは、同じリスト上の2つの異なるオブジェクトタイプを逆シリアル化します

分類Dev

同じ長さであるが、JS内のオブジェクトIDが異なる2つの配列を比較します

分類Dev

同じ配列のオブジェクトを異なるキーで2つマージします

分類Dev

オブジェクト内の要素が異なるオブジェクトの2つの配列を比較して、配列をフィルタリングするにはどうすればよいですか?

分類Dev

Javaは、クラスのフィールドとして2つの異なるオブジェクトタイプを使用します

分類Dev

Javaで二つのオブジェクト対2つのプリミティブを比較するときに==実際には同じでも異なって動作しますか?

分類Dev

オブジェクトの2つのリスト間でフィールドを比較するにはどうすればよいですか?

分類Dev

クエリオブジェクトを使用してSpringDataMongoDBの2つのフィールドを比較する方法

分類Dev

2つのオブジェクトのフィールドに同じデータが含まれているかどうかを確認します

分類Dev

等しいフィールドを持つがメモリ内で同じではないキーオブジェクトを介してマップの値にアクセスするJavascript

分類Dev

2つの異なるメソッドがモックオブジェクトで同じメソッドを呼び出すことを確認します

分類Dev

2つのオブジェクトをフィールドのフィールドで比較する

分類Dev

別のリストと同じ属性を持つオブジェクトのみが含まれるようにするJavaフィルターリスト

分類Dev

同じ変数名が2つの異なるオブジェクトを表すことができるjacksonを使用してレトロフィットからjsonを逆シリアル化する

分類Dev

同じスーパークラスに属するが、さまざまなサブクラスに属するオブジェクトのインスタンスで構成される2つの配列リストを比較する方法。

分類Dev

同じオブジェクトへの2つの弱参照は異なる情報を示します

分類Dev

2つの異なるオブジェクトが同じハッシュコードを持っている場合は可能ですか?それらが同じであることを意味しますか?

分類Dev

クラスの同じオブジェクトを使用しますが、メンバーは異なります

分類Dev

クラスを使用して作成された2つの異なるオブジェクトは、同じメモリを共有します

分類Dev

2つの異なるオブジェクトが同じハッシュコードを持っている場合はどうなりますか?

Related 関連記事

  1. 1

    異なるクラスの2つのオブジェクトとJavaの比較フィールドでリストをフィルタリングする方法

  2. 2

    どのように効率的に同じクラスの2つのオブジェクトを比較し、異なるフィールドであるかをチェックするには?

  3. 3

    オブジェクトの2つのフィールドを同じリストに収集する方法は?

  4. 4

    Javaで2つのオブジェクトを比較する..各オブジェクトには2つのフィールドがあります

  5. 5

    Retrofit / Gsonを使用して、JSONで同じタイプでフィールド名が異なるオブジェクトのリストを逆シリアル化するにはどうすればよいですか?

  6. 6

    Qtは2つの異なるスレッドで同じオブジェクトの2つのメソッドを実行します

  7. 7

    Django-2つのオブジェクトのフィールドは、外部キーが異なる場合にのみ同じ値を持つことができます

  8. 8

    2つの異なるモジュールで、同じモジュールから同じオブジェクトをインポートします。

  9. 9

    深い比較:2つのオブジェクトの値が同じでない場合、このコードはどのようにfalseを返しますか?

  10. 10

    GSONは、同じリスト上の2つの異なるオブジェクトタイプを逆シリアル化します

  11. 11

    同じ長さであるが、JS内のオブジェクトIDが異なる2つの配列を比較します

  12. 12

    同じ配列のオブジェクトを異なるキーで2つマージします

  13. 13

    オブジェクト内の要素が異なるオブジェクトの2つの配列を比較して、配列をフィルタリングするにはどうすればよいですか?

  14. 14

    Javaは、クラスのフィールドとして2つの異なるオブジェクトタイプを使用します

  15. 15

    Javaで二つのオブジェクト対2つのプリミティブを比較するときに==実際には同じでも異なって動作しますか?

  16. 16

    オブジェクトの2つのリスト間でフィールドを比較するにはどうすればよいですか?

  17. 17

    クエリオブジェクトを使用してSpringDataMongoDBの2つのフィールドを比較する方法

  18. 18

    2つのオブジェクトのフィールドに同じデータが含まれているかどうかを確認します

  19. 19

    等しいフィールドを持つがメモリ内で同じではないキーオブジェクトを介してマップの値にアクセスするJavascript

  20. 20

    2つの異なるメソッドがモックオブジェクトで同じメソッドを呼び出すことを確認します

  21. 21

    2つのオブジェクトをフィールドのフィールドで比較する

  22. 22

    別のリストと同じ属性を持つオブジェクトのみが含まれるようにするJavaフィルターリスト

  23. 23

    同じ変数名が2つの異なるオブジェクトを表すことができるjacksonを使用してレトロフィットからjsonを逆シリアル化する

  24. 24

    同じスーパークラスに属するが、さまざまなサブクラスに属するオブジェクトのインスタンスで構成される2つの配列リストを比較する方法。

  25. 25

    同じオブジェクトへの2つの弱参照は異なる情報を示します

  26. 26

    2つの異なるオブジェクトが同じハッシュコードを持っている場合は可能ですか?それらが同じであることを意味しますか?

  27. 27

    クラスの同じオブジェクトを使用しますが、メンバーは異なります

  28. 28

    クラスを使用して作成された2つの異なるオブジェクトは、同じメモリを共有します

  29. 29

    2つの異なるオブジェクトが同じハッシュコードを持っている場合はどうなりますか?

ホットタグ

アーカイブ