使用哪种对象集合类型?

时间:2011-04-21 20:11:26

标签: c# arrays list collections

现在我有一个2d字符串数组来保存我的数据:

//...find number of rows needed...
string[,] data = new string[totalRows, 12]; //row / column

有效。但是现在我想为我的程序添加更多功能,它不再是我的好处,因为连接2d数组,虽然可行,但是打开了其他问题:直到这一点我才将行数存储在类变量中,因为我没有不需要一次维持两个。可以说我知道列总是一样的,我可以将长度除以得到行并写一个方法来组合它们。

我觉得有更好的方法来解决这个问题。我对“更新”的东西缺乏了解,但我相信其中一个比其他人更能满足这个要求。因此,在我跳入并创建List<List<String>> data = new List<List<String>>();或其他同样奇怪的东西之前,我希望其他人的意见更有经验。

我不需要任何排序,删除,插入等功能。我只需要它来保存数据;现在我需要能够相对容易地去data += data2 - 无论如何都要做到这一点。 data.Length(仅给出外部长度)也非常有用。

最好的方法是什么?

如果您想了解更多信息,请与我们联系。感谢。

基于答案的更多信息:

数据基本上是电子表格格式。即

[['1234-56789-12345', 'screwdriver', '', 'ea', '1', '', '', '', '', '', '', ''],
[['1234-56789-54321', 'wrench', '', 'ea', '1', '2', '3', '', '', '', '', '']]

我不想处理弄清楚信息描述的内容 - 我不在乎。我需要相对于其他一切的位置。

更多信息:

用法是作为一个xml文件和另一个xml文件之间的保留槽。刚刚意识到那些xlst的东西可能是我最初问题的另一个解决方案,但是呃。也许在另一个生命中。 (一切正常......就像我说的那样,添加功能。如果它有效,为什么打破它?)

4 个答案:

答案 0 :(得分:2)

我认为值得一提的问题是,您的数据列可以更好地用一个对象来表示,该对象解释了每个列所持有的内容。例如,而不是

row 1 => { "Jane", "Smith", "1 Rocket Ave", "Houston", "TX" }

你有

new Person { FirstName = "Jane", LastName = "Smith", /* etc. */ }

然后,您的2D数组将成为这些新的Person对象的一维集合,这些对象在代码中更易于推理。

List<Person> people = ...
// vs.
string[,] people = ...

答案 1 :(得分:1)

这取决于'12'的硬度或灵活度。

我认为List<List<string>>是一种灵活的方法。

List<string[]>会固定它(使用空列可能更容易),同时仍然可以灵活地控制行数。像锯齿状阵列一样,你需要用for循环设置它:

List<string[]> data = new List<string[]>();

for (int i = 0; i < desiredRows; i++)
   data.Add(new string[12]);

data[1][1] = "Screwdriver";

答案 2 :(得分:0)

为什么不使用Dictionary

示例here

答案 3 :(得分:0)

Dictionary<string,List<string>>

Dictionary<int,List<string>>

Dictionary<int,string[]>

这取决于你想要使用什么类型的密钥(名称的字符串,id的int等)。

如果您不需要通过某种键进行查找,List<List<string>>没有任何问题。