C#数组或其他数据结构

时间:2011-01-20 14:03:23

标签: c# arrays dictionary

我想知道存储以下信息的最佳数据结构是什么:

假设我们有这个字符串:

  

1.2.0.0.15.4.22.3.0.0.0.2

该字符串还将计算超过1位数的值。这些点实际上并不是必需的,只是为了让我更清楚我想要的东西。

其中字符串中的每个数字代表一个计数器,我们必须每分钟计算一次。所以,第一分钟我们计算了1,第二个2,第三个0等等。没有预定义的大小,而且我只想在计算某些内容时进行插入或更改,因此零值实际上将在结构中用空值表示。计数将逐步进行。

最初结构在第一分钟将为空。

6 个答案:

答案 0 :(得分:6)

List<int?>效果很好。它将保留您添加元素的顺序,并允许在任何时候访问元素,并在需要时自动增长。

您也可以List<KeyValuePair<int, int?>> Key为分钟,Value为值。

另一种选择(感谢fearofawhackplanet)使用Dictionary,这意味着您可以按分钟引用数据。 Value的{​​{1}}不可为空,因为您不必为没有数据的分钟添加条目。

E.g。

Dictionary

答案 1 :(得分:1)

在我看来,List<int?>(这是List<Nullable<int>>的简写语法)就足够了。

这应该为您提供一个易于扩展的数据结构来存储您的值(包括空值),并允许您轻松迭代这些值。

如果您需要根据尝试查找值的时间进行任何类型的查找,您可能需要切换到Dictionary<int, int?>,以便将分钟用作关键字。

答案 2 :(得分:1)

您可以使用词典,它的优势在于,当您没有任何数据时,不必存储任何信息。例如:

Dictionary<int, int> data = new Dictionary<int, int>();
data.Add(1,1);
data.Add(2,2);
data.Add(5,5);
data.Add(6,4);

等等。这样做的缺点是,如果你遍历数据结构,你只会知道它们没有出现的时间为零

答案 3 :(得分:0)

嗯,首先,您显然希望数据结构能够轻松扩展。数组不符合该法案。所以,我首先考虑使用List<int>。然后你提到你需要存储空值,所以我将它改进为List<int?>。此外,您可能希望查询给定分钟的计数器,并使用List<int?>,您可以在O(1)时间内执行此操作。没有其他信息,这就是我要使用的。

答案 4 :(得分:0)

听起来您可以使用List<int>作为参赛作品,或List<int?>可以使用null来存储{{1}}值。

答案 5 :(得分:-1)

我可能只是使用char [](字符数组)...你可以将它们设置为无界限,这样你就不会有长度问题......