字典<string,object =“”>到字典<string,float =“”>

时间:2019-01-11 12:41:46

标签: c# linq

我目前正在开发.NET Framework 4.7.2应用程序。给定的是Dictionary<string, object>。我需要编写一种将结构转换为Dictionary<string, float>的方法。

private List<KeyValuePair<int, Dictionary<string, float>>> CreateResult(List<Dictionary<string, object>> items)
{
    var result = new List<KeyValuePair<int, Dictionary<string, float>>>();

    for (int i = 0; i < items.Count; i++)
    {
       var item = items[i].ToDictionary<string, float>(v => v); // Error, wrong approach
       result.Add(new KeyValuePair<int, Dictionary<string, float>>(i, new Dictionary<string, float>(item)));
    }
    return result;
}

不幸的是,我的方法不起作用,我也不真正知道将字典中所有值转换为float类型的正确方法。

您知道将“字典”中的所有值从类型对象转换为float类型的一种好方法吗?

非常感谢您!

3 个答案:

答案 0 :(得分:2)

您可以转换字典并使用单个(难看的)LINQ语句插入索引:

var result=items.Select((dct,i)=>new KeyValuePair<int, Dictionary<string, float>>(
                                           i,
                                           dct.ToDictionary(p=>p.Key,p=>(float)p.Value))
                       ).ToList();

KeyValuePair除了属性名称之外没有任何其他优势。您可以使用值元组简化查询:

var result=items.Select((dct,i)=>(i,dct.ToDictionary(p=>p.Key,p=>(float)p.Value)))
                 .ToList();

并在返回类型中命名元组项目:

private List<(int index , Dictionary<string, float> dict)> CreateResult(List<Dictionary<string, object>> items)
{
    var result=items.Select((dct,i)=>(i,dct.ToDictionary(p=>p.Key,p=>(float)p.Value)))
                    .ToList();
    return result;
}

答案 1 :(得分:1)

知道具有object值的字典仅包含float值时,可以在ToDictionary中进行类型转换:

private List<KeyValuePair<int, Dictionary<string, float>>> CreateResult(List<Dictionary<string, object>> items)
{
    var result = new List<KeyValuePair<int, Dictionary<string, float>>>();

    for (int i = 0; i < items.Count; i++)
    {
       var item = items[i].ToDictionary<string, float>(v => v.Key, v = (float)v.Value);
       result.Add(new KeyValuePair<int, Dictionary<string, float>>(i, item));
    }
    return result;
}

您可以使用任何您认为必要的转换来替换类型转换。重要的是ToDictionary中第二个lambda表达式的返回类型为float

答案 2 :(得分:1)

尝试一下

df$Date.Time=as.POSIXct(df$Date.Time,tz="America/New_York"
,format = "%m/%d/%Y%H:%M:%S")