用这个简短的可重现示例替换我的第一个无效问题
var firstObjects = new List<object>();
var secondObjects = new List<object>();
Dictionary<object, object> inner = secondObjects.Select(o => o).Zip(secondObjects).ToDictionary();
var outer = firstObjects.Select(o => o).Zip(inner).ToDictionary();
问题是为什么是
outer
的结果:
Dictionary<object, KeyValuePair<object, object>>
而不是:
Dictionary<object, Dictionary<object, object>>
问题是为什么外部的结果是:
而不是:Dictionary<object, KeyValuePair<object, object>>
Dictionary<object, Dictionary<object, object>>
基本上是一样的,为什么内部的结果是
Dictionary<object, object>
。
Enumerable.Zip<TFirst,TSecond>(IEnumerable<TFirst>, IEnumerable<TSecond>)
,如文档所述:
使用两个指定序列中的元素生成元组序列。
退货
元组序列,其中元素按顺序取自第一个和第二个序列。IEnumerable<ValueTuple<TFirst, TSecond>>
并且
Dictionary<TKey, TValue>
是 IEnumerable<KeyValuePair<TKey,TValue>>
(docs),所以结果是非常符合预期的。
如果您希望
Zip
的结果为IEnumerable<object, Dictionary<...>>
,您需要使用字典集合进行压缩,即类似:
IEnumerable<Dictionary<object, object>> dicts = ...;
var outer = firstObjects.Select(o => o)
.Zip(dicts)
.ToDictionary();
请注意,您可能想要
Select
,而不是 Zip
,但没有实际的代码/示例数据和所需的结果,很难说。