比使用字符串作为键的字典更好的数据类型,以及作为值的列表

时间:2016-06-05 10:35:08

标签: c#

我有一个字典,其中键是一个字符串;而值是浮动列表。

key = "Sensor1";
values = new List<float>{0.4, 0.5, 0.2, 0.4};

这是我可以用于我的案例的最佳数据结构吗?我关心的是解析值列表所花费的时间(我会经常解析它,无论是读取还是写入),但是我没有看到另一种方式,除了字典中包含值的列表

修改

40个传感器每秒读取10次值;我读了所有这些值,并在字典中保存了包含值和键的列表。 在某些情况下,必须更换每个传感器列表中的值。整个过程非常复杂;这是总结它的最快方式;希望很清楚。

4 个答案:

答案 0 :(得分:1)

如果您的数据结构允许,它通常Dictionary主要用于此类任务,因为符号为O(1),所以它非常快。

我建议调查HashSet,对你的情况可能更有效。

可以找到DictionaryListHashSet之间的比较here

答案 1 :(得分:0)

如果您的列表代表了共享某些常见行为的相关值,那么您可以将此列表封装在类中,从中受益:

class SensorData {
    public IList<float> Values {get;}
    public SensorData(IEnumerable<float> values) {
        Values = values.ToList();
    }
    // Add some useful methods that operate on Values here
    ...
}

现在而不是制作

IDictionary<string,List<float>>

你会做

IDictionary<string,SensorData>

可能会提高代码的可读性。

答案 2 :(得分:0)

对于您描述的数据类型,您需要使用某种哈希映射, 有多种方法可以实现哈希映射(如c#字典), 例如,在每个键中,您可以将值保存为树(二进制,红色/黑色,..),链表,排序数组等等。 还需要选择一个需要非常快的哈希函数。 我相信微软可以通过合适的性能以最佳方式实现字典。

答案 3 :(得分:0)

不确定你的意思&#34;解析值列表&#34;但可能你正在寻找Lookup

类似于Dictionary<TKey, Collection<TElement>>。您可以通过此键按键和访问集合对项目进行分组