【问题标题】:Which object-collection type to use?使用哪种对象收集类型?
【发布时间】:2011-08-10 14:16:37
【问题描述】:

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

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

它有效。但是现在我想为我的程序添加更多功能,它不再对我有利,因为连接二维数组虽然可行,但会引发其他问题:直到此时我将行数存储在一个类变量中,因为我没有不需要同时维护两个。可以说我知道列总是相同的,我可以将长度除以得到行并编写一个方法来组合它们。

我觉得有更好的方法来解决这个问题。我对“较新”的东西缺乏了解,但我确信其中一个比其他的更符合要求。因此,在我开始创建 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 文件和另一个之间的容器。刚刚意识到那些 xlst 事情可能是我最初问题的另一种解决方案,但是。也许在另一种生活中。 (一切正常......就像我说的,添加功能。如果它有效,为什么要破坏它?)

【问题讨论】:

  • List<List<string>> 可以正常工作。你能想到任何你想做的操作,使用它不会很简单吗?
  • 你如何搜索(查找)这个?
  • 不能说我可以,但是我对它们不太熟悉。只是好奇那里还有什么。
  • @Henk 我不明白你的问题?
  • emragin,这里的选择主要看使用场景。你没有表现出太多。添加一些示例。

标签: c# arrays list collections


【解决方案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】:
Dictionary<string,List<string>>

Dictionary<int,List<string>>

Dictionary<int,string[]>

等等

这取决于您要使用哪种类型的键(名称为字符串,ID 为 int 等)

如果您不需要通过某种键查找,List&lt;List&lt;string&gt;&gt; 没有任何问题。

【讨论】:

    【解决方案3】:

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

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

    你有

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

    那么你的二维数组就变成了这些新的Person 对象的一维集合,这些对象更容易在代码中进行推理。

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

    【讨论】:

    • 回答您的问题:不,我需要维持订单。有些值甚至可能是空的,但无论如何我都需要它们。创建一个结构来保存我的行数据的想法会增加更多的问题。
    • 也就是说,我可以理解你为什么要提出这个问题——我没有说得很清楚。我想得越多,对数据的面向对象方法就越多,我通常会喜欢这种方法,但这是不对的。基本上是用来装电子表格的。
    【解决方案4】:

    你为什么不用Dictionary

    示例here

    【讨论】:

    • 我过去曾考虑过字典。我根本不需要键值功能。我也需要维持秩序。
    • 好的。如果您需要比 OrderBy 更多地控制排序,那么最好使用其他东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多