【问题标题】:Best way to convert Dictionary to two lists将字典转换为两个列表的最佳方法
【发布时间】:2016-07-08 09:16:52
【问题描述】:

如何将Dictionary<DateTime, double> 类型的字典转换为Tuple<List<DateTime>, List<double>>

谢谢

编辑:以下是否保证两个列表中项目的顺序相同? var abc = new Tuple<List<DateTime>, List<double>>(_data.Keys.ToList(), _data.Values.ToList());

【问题讨论】:

  • 可能想看看KeysValues属性
  • 关于KeysValues属性的顺序Dictionary中键的顺序.KeyCollection未指定,但与再次从 msdn 页面返回的 Dictionary.ValueCollection 中的关联值由 Values 属性

标签: c# list dictionary ienumerable


【解决方案1】:

简单(保证顺序):

Tuple<List<DateTime>, List<double>> tuple 
                   = Tuple.Create(dict.Keys.ToList(), dict.Values.ToList());

Dictionary.ValueCollection 中值的顺序未指定,但与 Dictionary.KeyCollection 中的关联键 由 Keys 属性返回。

来源:MSDN

订单保证示例:

即使在更新、删除和添加之后也能保证订单。

Dictionary<int, string> dict = new Dictionary<int, string>();

dict[2] = "2";
dict[1] = "0";
dict[3] = "3";
dict[1] = "1";
dict[1] = "1";

dict.Remove(3);

var tuple = Tuple.Create(dict.Keys.ToList(), dict.Values.ToList());
// 2 1
// "2" "1"

【讨论】:

  • 感谢您的回答。您首先回答并提供了相同的解决方案,因此我将其标记为答案。
【解决方案2】:
var result = Tuple.Create(dict.Keys.ToList(), dict.Values.ToList());

根据您评论中的订单问题:

无法保证您会得到什么顺序,因为字典不是有序集合。但可以保证您在Keys- 和Values- 集合中获得相同的结果,如果您使用foreach(KeyValuepair&lt;DateTime,double&gt; kv in dict)

MSDN: Keys:

字典中键的顺序(Of TKey, TValue).KeyCollection 未指定,但它与中的关联值的顺序相同 值返回的 Dictionary(Of TKey, TValue).ValueCollection 属性。

MSDN: Values:

值的顺序 Dictionary(Of TKey, TValue).ValueCollection 未指定,但它是 与中的关联键相同的顺序 Dictionary(Of TKey, TValue).KeyCollection 由 Keys 返回 属性。

你问过:

那么,例如,dict[result.Item1[5]] == result.Item2[5] 成立吗?

是的,根据上面的文档可以保证这一点

【讨论】:

  • 这是否保证两个列表中的项目顺序与原始字典内容一致?如果我调用result.Item1[5] and result.Item2[5],这两个项目会匹配一个字典条目吗?以下会成立吗? dict[result.Item1[5] == result.Item2[5]
  • 我在上面贴了一个例子
  • @MattWolf 检查我的答案
  • 那么,例如,dict[result.Item1[5]] == result.Item2[5] 成立吗?
  • @MattWolf:是的,这是根据文档保证的
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 2021-10-16
相关资源
最近更新 更多