我打算设计一个包含元素的数据结构,
{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}
我打算在运行时访问该元素。哪种解决方案更好?
感谢您的评论。
[更新]
1.上面列出的int
数字代表某些对象。像字典对象等。
2.应用程序启动后,所有数据都将加载到内存中。然后只读允许。不需要编写/添加/删除等。
答案 0 :(得分:3)
锯齿状阵列怎么样? http://msdn.microsoft.com/en-us/library/2s05feca.aspx
通过数组索引访问元素是O(1)。
答案 1 :(得分:2)
这取决于对您来说更重要的是,更快的读取速度还是更快的写入速度?字典可以快速访问存储的值,但同时向字典添加值会花费更长的时间。
如果你有很多需要多次访问的值,那么如果你发现自己在另一个for循环示例中循环遍历值列表,那么字典是可行的方法:
foreach(var item in ListA)
{
foreach(var item in ListB)
{
// Match against all values in list B
}
}
在上面的示例中,如果List B是字典而不是列表,那将是最好的,因为您在ListA的每次迭代中循环遍历列表。随着ListB中元素的数量增加,上述代码的执行时间将增加,但是如果它是一个字典,它将没有太大的区别。
答案 2 :(得分:2)
如果您要进行随机访问,那么Dictionary将是一个不错的选择。但请记住,您需要拥有唯一的密钥(因为您要转到每个列表的第一个元素,因为每个列表的关键第一个元素应该是唯一的)
如果要按顺序访问数据结构的元素,则ArrayList更好