【问题标题】:How do I store both objects and ints in an array?如何将对象和整数存储在数组中?
【发布时间】:2021-12-23 20:20:43
【问题描述】:

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

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

【问题讨论】:

  • 也许你想要Dictionary&lt;int, object&gt;()?还是List&lt;(int, object)&gt;()?或者创建一些具有 int 和 object 属性的 Model 类,并在 List&lt;Model&gt;() 中使用它。
  • @Auditive 我想保留数组表示,所以字典不起作用。还有其他想法吗?
  • 如果你设置在一个数组上,你可以让它成为你想要使用的一些共同父级的数组。最简单的当然是object[][]object[,] (呃二维数组)

标签: c# arrays object path-finding


【解决方案1】:

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

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

..多态,宝贝! :)

【讨论】:

  • 我最终只创建了一个构造方法,它只接受一个值(0 表示墙壁,1 表示路径)并且现在工作得很好,感谢您的灵感:) public MagazijnObject(string loc, int rank, string it) { Locatie = loc; Ranking = rank; Item = it; } public MagazijnObject(int valu) { val = valu; }
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2018-06-04
  • 2021-08-27
  • 2021-04-11
  • 2016-03-26
相关资源
最近更新 更多