多维数据结构?

时间:2012-10-23 16:34:26

标签: c# data-structures multidimensional-array

我需要一个带有行和列的多维数据结构。

  • 必须能够在数据结构中的任何位置插入元素。示例:{A , B}我想在CA之间插入B{A, C, B}
  • 动态:我不知道数据结构的大小。
  • 另一个例子:我知道我要插入元素的[row] [col]。 EX。 insert("A", 1, 5),其中A是要插入的元素15是< EM>列

修改
我希望能够像这样插入。

    static void Main(string[] args)
    {
        Program p = new Program();
        List<List<string()>> list = new List<List<string>()>();
        list.Insert("RAWR", 1, 2); // RAWR is the element to insert, 1 is the row, 2 is the col.
        list.Insert("Hello", 3, 5);
        for (int i = 0; i < list.Count; i++)
        {
            Console.WriteLine(list[i]);
        }
        Console.ReadKey();
    }

当然这不起作用,因为该列表不支持此功能。我理解这段代码很糟糕,但我只是想了解一下我想要完成的事情
所以从某种意义上说,我将有一个用户选择将哪个ROW和COL插入元素。

3 个答案:

答案 0 :(得分:2)

我认为列表清单应该可以正常工作:

IList<IList<T>> multiDim = new List<IList<T>>();

您可以像这样插入新行:

multiDim.Insert(atRow, new List<T>());

或在特定行中插入新元素:

multiDim[row].Insert(atColumn, myElement);

请注意,您需要在列表中包含足够的元素才能调用Insert;否则,您将获得超出范围的异常。解决此问题的最简单方法是编写一个小实用程序方法,在插入之前添加空项:

private static Expand<T>(IList<T> list, int index) {
    while (list.Count < index) {
        list.Add(default(T));
    }
}

按如下方式重写您的程序:

Expand(list, 1);
list.Insert(1, "HELLO");
Expand(list, 5);
list.Insert(5, "RAWR");

答案 1 :(得分:2)

也许Dictionary可能与元组一起使用,因为它是关键:

Dictionary<Tuple<int, int>, string> dict = new Dictionary<Tuple<int, int>, string>();
dict.Add(new Tuple<int, int>(1, 5), "A");

答案 2 :(得分:0)

如果您的键是整数或任何像字符串一样的顺序,那么

SortedDictionary<int, T>似乎非常合适。只需将按键放入字典即可。

var sparseArray = new SortedDictionary<int, string>();
sparseArray.Add(1, "notepad.exe");
sparseArray.Add(5, "paint.exe");
sparseArray.Add(3, "paint.exe");
sparseArray.Add(2, "wordpad.exe");