可调整大小的多维表

时间:2017-01-29 20:53:14

标签: c# unity3d lua corona

我需要存储包含#0 0x0000000119dcdc12 in jet_context_OpenGL::set_vertex_constant(jet_constant*, int) () true值字段的电路板,然后还可以检查这些字段的值。当然,我可以创建一个包含行和列的单独类,并将每个字段存储在列表中,然后检查是否有包含所需坐标的条目,但这不是最佳方式。

在Lua,我曾经这样做过:

false

因此,一旦创建了一个行条目,我只会在已创建的选项卡中添加一个列条目。我认为这是最优化的。

编辑:那么如何使用C#进行编辑? 编辑2:董事会将在游戏过程中成长。你死后会停下来。所以没有办法知道数组的任何维度来初始化它。

2 个答案:

答案 0 :(得分:2)

修改

最初的问题没有提到阵列预计会随着时间的推移而增长。数组增长。一旦创建,它就是固定大小。

虽然,您可以创建一个新的数组大小并将其他数组中的旧值复制到它,但我不推荐这个,因为还有其他解决方案。

您可以使用List<List<bool>>。它非常棘手,但可以使用简单的包装器完成。

public class BoolArray
{
    List<List<bool>> storedTab;

    public BoolArray(int newRowSize = 1, int newColumnSize = 1, bool defaultValue = false)
    {
        storedTab = new List<List<bool>>();
        reSize(newRowSize, newColumnSize, defaultValue);
    }

    //Grows by 5 as default
    public void reSize(int newRowSize = 5, int newColumnSize = 5, bool defaultValue = false)
    {
        //Fixes problem when newRowSize is 0
        if (newRowSize <= 0)
        {
            //Add/Increment Column to every row
            int allRow = storedTab.Count;

            for (int i = 0; i < allRow; i++)
            {

                for (int j = 0; j < newColumnSize; j++)
                {
                    storedTab[i].Add(defaultValue);
                }
            }
        }
        else
        {
            for (int i = 0; i < newRowSize; i++)
            {
                //Resize Row
                storedTab.Add(new List<bool>());


                //Resize Column
                for (int j = 0; j < newColumnSize; j++)
                {
                    storedTab[i].Add(defaultValue);
                }
            }
        }
    }

    public void setValue(int row, int column, bool value)
    {
        storedTab[row][column] = value;
    }

    public bool getValue(int row, int column)
    {
        return storedTab[row][column];
    }

    public int rowSize
    {
        get { return storedTab.Count; }
    }

    public int columSize
    {
        get
        {
            return storedTab[0].Count;
        }
    }

    public void clear()
    {
        for (int i = 0; i < rowSize; i++)
        {
            for (int j = 0; j < columSize; j++)
            {
                storedTab[j].Clear();
            }
        }
        storedTab.Clear();
    }
}

<强>用法

BoolArray boolArray = new BoolArray(1, 1);

//Set Value
boolArray.setValue(0, 0, true);

Debug.Log("Before Row Size: " + boolArray.rowSize);
Debug.Log("Before Column Size: " + boolArray.columSize);

//Resize by 4 and 6 (now 5 by 7)
boolArray.reSize(4, 6);

Debug.Log("After Row Size: " + boolArray.rowSize);
Debug.Log("After Column Size: " + boolArray.columSize);

//Resize by 10 and 20 (now 15 by 27)
boolArray.reSize(10, 20);

Debug.Log("After Row Size: " + boolArray.rowSize);
Debug.Log("After Column Size: " + boolArray.columSize);

//Get Value
Debug.Log("Value: " + boolArray.getValue(0, 0));

boolArray.clear();

答案 1 :(得分:0)

也许您可以使用HashTable

Hashtable storedTab = new Hashtable();

//Add a value
storedTab[row+"-"+column] = true;   //create a unique key like "1-3" (for row 1, column 3)

//To check if this row/column has a value
if (storedTab.ContainsKey(row+"-"+column))
{
   //do something with storedTab[row+"-"+column]
}