我目前正在开发.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类型的一种好方法吗?
非常感谢您!
答案 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")