【问题标题】:How to Save a Multidimensional Array Index?如何保存多维数组索引?
【发布时间】:2013-04-06 16:11:05
【问题描述】:

基本上,我的第一个任务是将“0”的位置保存为整数。使用标准数组非常简单。此代码循环遍历数组(大小:8),直到找到 0,然后将其保存为位置。见以下代码:

p.s: n 是对保存在其他地方的数组的引用。

int position = 0;
        this.nodesExpanded++;
        // Loop through the array to get the position of where '0' is
        for (int i = 0; i < n.getPuzzle().length; i++){
            if (n.getPuzzle()[i] == 0){
                position = i;
                break;
            }
        }

我的最终任务是使多维数组(大小:[3, 3])成为可能。所以这是我迄今为止创建的:

for (int x = 0; x < 3; x++)
        {
            for (int y = 0; y < 3; y++)
            {
                if (n.getPuzzle()[x,y] == 0)
                {
                    **position = ;**
                    break;
                }
            }//end y loop
        }//end x loop

那么我该如何将一个数组引用保存到一个值中呢? 我猜“位置”需要是 int 以外的东西..

如果您需要更多说明,请务必发表评论,提前抱歉并感谢您!

【问题讨论】:

    标签: c# arrays loops reference


    【解决方案1】:

    您可以使用Tuple 来存储该位置。或者您可以创建自己的数据结构。

    示例:最后您可以看到如何访问元组项。

    var positions = new List<Tuple<int, int>>();
    
                for (int x = 0; x < 3; x++)
                {
                    for (int y = 0; y < 3; y++)
                    {
                        if (n.getPuzzle()[x,y] == 0)
                        {
                            positions.Add(new Tuple<int, int>(x,y));
                            break;
                        }
                    }//end y loop
                }//end x loop
    
                if(positions.Any())
                {
                    var xpos = positions[0].Item1;
                    var ypos = positions[0].Item2;
                }
    

    【讨论】:

    • 举个例子,这将是一个更好的答案。
    【解决方案2】:

    我发现存储多维数组索引的一种自然方法是使用大小为维数的单维数组。

    因此,如果您有 object[,,] A 和索引 int[] i,您将使用表达式 A[i[0],i[1],i[2]] 对 A 进行索引。

    【讨论】:

      【解决方案3】:

      它的工作方式与您的一维数组相同,但您需要保留两个位置值。我使用了ints 作为示例,但您可能希望使用自定义结构或元组(如 AD.Net)所说。

      int xpos = -1;
      int ypos = -1;
      for (int x = 0; x < 3; x++)
      {
          for (int y = 0; y < 3; y++)
          {
              if (n.getPuzzle()[x,y] == 0)
              {
                  xpos = x;
                  ypos = y;
                  break;
              }
          }//end y loop
      }//end x loop
      if (!(xpos > -1 && ypos > -1)) ; // 0 was not found
      

      【讨论】:

      • 该死,我应该考虑这样做。感谢您的意见!
      猜你喜欢
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      相关资源
      最近更新 更多