2012-10-23 99 views
1

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

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

编辑
我希望能够插入这样。

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

当然,这并不工作,因为列表中不支持此功能。我知道这段代码很糟糕,但我只想知道我正在努力完成的任务。

因此,从某种意义上说,我将有一个用户将选择哪个行和COL插入元素。

+3

什么问题?你有什么尝试? [问] –

+0

如果你在[1,5]插入,会发生什么。该行中的所有内容都正确吗?或者插入是否导致item [1,end]移动到[2,0]?也就是说,它是否会在整个网格中移动项目? –

+0

我尝试过使用DataTable,但DataTable不允许我插入表的任何位置,我尝试过数组,但是我不知道数组的大小。我尝试过列表,但列表不允许我放弃任何位置。 – AustinT

回答

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"); 
+0

NVM,我仍然有问题。添加编辑到我的帖子的问题。谢谢你的输入! – AustinT

+0

嗯,我明白这是解决我的问题的一种方法。 – AustinT

2

也许Dictionary可能与工作元组,因为它的关键:

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

您可能想使用'Tuple.Create'而不是构造函数。无论如何,这是一般的惯例。 – Servy

+0

嗯,好吧。我试图仍然理解Tuple是如何工作的。 – AustinT

+0

@AustinTruong'Tuple'仅仅是一个简单的数据持有者类。在这种情况下,它将与创建具有两个整型属性的类(接近)相同,尽管值得注意的是它是不可变的,并且它也智能地重载了'Equals'和'GetHashCode',因此它可以很好地工作,一个'Dictionary'。 – Servy

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"); 
+0

关键似乎是一对整数,而不是一个整数,所以也许'Tuple '。 – Servy

+0

好吧,那么我怎么做这个多维? – AustinT

+0

我的编辑更清楚地表明我正在努力完成。谢谢您的帮助。 – AustinT