【问题标题】:C# Most elegant way to convert string array to dictionary with different keysC# 将字符串数组转换为具有不同键的字典的最优雅方法
【发布时间】:2018-02-26 17:49:06
【问题描述】:

我有一组字符串数组(将 CSV 拆分为行然后分隔的结果) {31001, 2014-01-01, 24:00:00},{31001, 2014-01-02, 24:00:00},{31001, 2014-01-03, 24:00:00} ... 现在我需要将其转换为字典列表,其中每个字典元素将具有自定义键,具体取决于数组元素索引。所以我想实现这样的目标:

{
 {"Index":"31001", "Date":"2014-01-01", "Time":"24:00:00"},
 {"Index":"31001", "Date":"2014-01-02", "Time":"24:00:00"},
 {"Index":"31001", "Date":"2014-01-03", "Time":"24:00:00"},
 ...
}

我不能为此使用模型

【问题讨论】:

  • 由于您的数据似乎是JSON,您是否考虑过使用JSON.Net newtonsoft.com/json
  • 对不起。什么是键,什么是值?
  • 我需要对密钥进行硬编码。所以第一个数组元素应该有“索引”键,第二个 - “日期”,第三个 - “时间”
  • 你想要实现的东西看起来不像字典,它看起来像 JSON。
  • 那么价值观是什么?

标签: c# arrays dictionary


【解决方案1】:

假设您将有重复的键,您可以使用类似的东西

List<KeyValuePair<string,Tuple<string,string>> 

其中键是索引,其余数据属于元组(日期、时间等)。 如果您有更多数据,您可以简单地使用List&lt;KeyValuePair&lt;string,List&lt;string&gt;&gt;&gt;

【讨论】:

    【解决方案2】:

    你可以用一个匿名对象来做到这一点。 这种方式将导致 objList 具有所有具有索引、日期和时间属性的行。同时不使用命名类。

    (请注意,如果我没有正确命名,我还在学习)


    List<Object> objList = new List<object>();
    
    foreach(var line in lines)
    {
        var fields = line.Split(',');
        objList.Add(new {
            Index = fields[0],
            Date = fields[1],
            Time=fields[2]
         });
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 2015-07-13
      • 2017-02-11
      相关资源
      最近更新 更多