【问题标题】:Question on Data Structure Design数据结构设计问题
【发布时间】:2011-05-14 07:01:53
【问题描述】:

我打算设计一个包含这样元素的数据结构,

{1, 13, 15, 113, 117, 145}
{2, 23, 27}
{5, 53, 55, 511, 519}
{9, 11}

到目前为止,我有两个想法。

第一。建立一个字典(键,值);

When Key = 1, Value = ArrayList(13, 15, 113, 117, 145)
When Key = 2, Value = ArrayList(23, 27)
When Key = 5, Value = ArrayList(53, 55, 511, 519)
When Key = 9, Value = ArrayList(11)

第二。构建一个 ArrayList(SubArrayLists)

subArrayList1 {1, 13, 15, 113, 117, 145}
subArrayList2 {2, 23, 27}
subArrayList3 {5, 53, 55, 511, 519}
subArrayList4 {9, 11}

我计划在运行时访问该元素。哪种解决方案更好?

感谢您的 cmets。

[更新]
1. 上面列出的int 数字可能代表某些对象。像字典对象等
2. 应用程序启动后,所有数据将被加载到内存中。然后只读允许。不需要写/添加/删除等。

【问题讨论】:

  • ArrayList 已过时,即使在 .NET 2.0 中也是如此(我认为这是您的 C# 2.0 编译器的目标?)。这里的重要问题是:如何查询这个数据结构,以及在初始化后如何改变(如果有的话)?
  • 有什么理由不想使用List<int> 而不是ArrayList
  • 你需要提供比这更多的信息,你打算用这个做什么?如果您要按键查找内容,字典很好,但如果您只是要遍历列表,那么它是一种浪费......
  • +1 目前我正在做一个有很多 ArrayList 的项目,该项目始于 2007 年!我想知道过去 3 年他们在地球上做了什么。
  • @Jb。上面的 int 数字代表一些对象。像字典对象。这就是为什么我必须使用 ArrayList。谢谢。

标签: c# data-structures dictionary c#-2.0 arraylist


【解决方案1】:

锯齿状阵列怎么样? http://msdn.microsoft.com/en-us/library/2s05feca.aspx

通过数组索引访问元素是 O(1)。

【讨论】:

    【解决方案2】:

    这取决于对您来说更重要的是更快的读取速度还是更快的写入速度?字典可以快速访问存储的值,但同时将值添加到字典需要更长的时间。

    如果你有很多值需要被多次访问,那么字典就是你要走的路,如果你发现自己在另一个 for 循环示例中循环遍历一个值列表:

    foreach(var item in ListA)
    {
      foreach(var item in ListB)
      {
         // Match against all values in list B        
    
      }
    }
    

    在上面的示例中,最好 List B 是字典而不是列表,因为您在 ListA 的每次迭代中都在循环遍历该列表。随着 ListB 中元素数量的增加,上述代码的执行时间会增加,但是如果它是一个字典,则不会有太大的区别。

    【讨论】:

      【解决方案3】:

      如果您要进行随机访问,那么 Dictionary 将是一个不错的选择。但请记住,您需要有唯一的键(因为您要进入每个列表的第一个元素,因为每个列表的键第一个元素应该是唯一的)

      如果要按顺序访问数据结构的元素,ArrayList 更好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-22
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多