我想知道存储以下信息的最佳数据结构是什么:
假设我们有这个字符串:
1.2.0.0.15.4.22.3.0.0.0.2
该字符串还将计算超过1位数的值。这些点实际上并不是必需的,只是为了让我更清楚我想要的东西。
其中字符串中的每个数字代表一个计数器,我们必须每分钟计算一次。所以,第一分钟我们计算了1
,第二个2
,第三个0
等等。没有预定义的大小,而且我只想在计算某些内容时进行插入或更改,因此零值实际上将在结构中用空值表示。计数将逐步进行。
最初结构在第一分钟将为空。
答案 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 [](字符数组)...你可以将它们设置为无界限,这样你就不会有长度问题......