You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#中存储CSV文件数据的合适数据结构及程序逻辑问询

适合存储CSV键值数据的推荐数据结构

嘿,针对你处理这类CSV键值数据的场景,我整理了几个比单纯用List<KeyValuePair<string, double>>更实用的数据结构,适配不同的后续操作需求:

  • Dictionary<string, double>
    这应该是最贴合你需求的选择!因为你的CSV第一列是唯一标识的字符串(假设单个文件内键不重复),Dictionary提供O(1)的快速查找效率,不管你是要匹配两个文件的相同键、还是单独提取某个键对应的值,都比遍历List高效太多。读取CSV时直接把每一行的键值对Add进去,后续取值只要dict["AC"]就能立刻拿到对应数值,非常方便。

  • Lookup<string, double>
    要是你的CSV里存在同一个字符串键对应多个数值的情况(比如某个ID重复出现),Lookup就很合适。它是.NET内置的只读结构,每个键对应一个数值集合,你可以用LINQ的ToLookup()方法快速把已有的List转换成Lookup,后续查找某个键的所有值会很省心。

  • 自定义类 + List
    如果后续你可能需要给CSV数据扩展更多字段,或者想让代码可读性更高,不如定义一个简单的实体类:

    public class CsvDataRecord
    {
        public string Key { get; set; }
        public double Value { get; set; }
    }
    

    然后用List<CsvDataRecord>来存储。这样代码逻辑会更清晰,后续做筛选、排序或者扩展字段都更灵活,比KeyValuePair更具可读性。

  • OrderedDictionary(或自定义顺序+查找结构)
    要是你既需要保留CSV行的插入顺序,又要快速查找键对应的值,OrderedDictionary(非泛型,可强转)就能满足需求。或者你也可以自己封装一个组合结构:用List存储顺序、用Dictionary存储键值映射,这样既能按原始顺序遍历,又能快速查找,兼顾两者的优势。

根据你提到的“取第一个值”的逻辑需求,如果是找两个文件中相同键的值,Dictionary的查找效率绝对是最优的;如果是要按行顺序取第一个出现的特定键值,那结合List的顺序性+Dictionary的快速定位会更高效。

内容的提问来源于stack exchange,提问作者TiredOfProgramming

火山引擎 最新活动