首页 > 解决方案 > 如何将对象和整数存储在数组中?

问题描述

我目前正在从事一个项目,我必须将仓库转换为数组表示,但是,我遇到了问题。我想将工作人员可以行走的路径定义为值 = 1 的数组单元。工作人员不能去的地方的值为 0,带有物品的货架将是对象。这当然不是一个可行的选择,因为我们不能将对象存储在 int 数组中,但是,除了使用 int 数组之外,我目前想不出另一种表示路径的方法。那么如何去做呢?这是我正在寻找的快速视觉表示:数组示例

namespace MyApplication
{
    
  class MagazijnObject
  {
    public string Locatie;//waar ligt het product?
    public int Ranking; //hoe populair is dit product?
    public string Item; //welk product ligt hier?

    
    public MagazijnObject(string loc, int rank, string it)
    {
     Locatie = loc;
     Ranking = rank;
     Item = it;
    }
     

    static void Main(string[] args)
    {
      MagazijnObject voorbeeld = new MagazijnObject("D02020A", 1, "Meel");
      Console.WriteLine(voorbeeld.Locatie);
      Console.WriteLine(voorbeeld.Ranking);
      Console.WriteLine(voorbeeld.Item);
      int[,] GangVoorbeeld = new int[5,10]; //this is a single hallway, with shelves on either side
      string gang = "D02";
//traverse array
      for (int i = 0; i < GangVoorbeeld.GetLength(0); i++)
      {for (int j = 0; j < GangVoorbeeld.GetLength(1); j++)

      { if ( i == 1 || i == 3) //shelves with items
      {GangVoorbeeld[i,j] = new MagazijnObject(gang + i, 1, "test"); //try to create object, however can't do so because I have an int array. However, I don't know how to define the walking path in an object representation.
      }
      
      }
      
      
    }
  }
}}

任何提示将不胜感激!亲切的问候, Douwe Brink

标签: c#arraysobjectpath-finding

解决方案


如果你设置在一个数组上,你可以让它成为你想要使用的一些共同父级的数组。最简单的当然是一个object[][],但让你绊倒的是这种对制作人行道的执着一个int和一个架子一个对象..将仓库中的所有东西建模为基类的某种派生似乎更明智,而不是让走道成为0/1的整数。

class WarehouseEntity {} 

class Wall:WarehouseEntity{}
class Walkway:WarehouseEntity{}
class Shelf:WarehouseEntity{}


var warehouse = new WarehouseEntity[5,10] ...

现在,您可以在阵列中的任何位置放置墙壁、走道或架子。走道可以包含当前站在那 10 平方米(或其他)走道中的人员列表。一个货架可能有一个它包含的产品列表等。一面墙没有多大作用,但记录为一面墙可能很方便,因为也许你只是想让各种 WarehouseEntity 有一个它们是什么的位图图形,渲染它们只是在warehouse数组上循环,询问每个元素的位图,而不是说“如果是墙,就画墙,如果是人行道,就画人行道..”

class WarehouseEntity {
  Point Coordinates {get; set;}
  abstract Bitmap GetBitmap();
} 

class Wall:WarehouseEntity{

  override Bitmap GetBitmap(){ return _wall_bmp; }
}

class Walkway:WarehouseEntity{

  public List<Person> PeopleStandingHere;
  override Bitmap GetBitmap(){ return _walkway_bmp; }
}

class Shelf:WarehouseEntity{

  public List<Product> ProductsOnShelf;
  override Bitmap GetBitmap(){ return _walkway_bmp; }
}

...
foreach(var we in warehouse)
{
  graphics.DrawImage(we.GetBitMap(), we.Coordinates.X, we.Coordinates.Y);
}

..多态性,宝贝!:)


推荐阅读