我有一个像这样定义的对象词典 -
Dictionary<string, MyObject> myObjectDictionary
我想根据索引和项目数来获取字典中的项目。我正在尝试使用Skip
和Take
。但这需要将其重新归结为Dictionary<string, MyObject>
。如何才能做到这一点?我应该采取不同的方式吗?
这是我的代码,尝试重铸失败 -
Dictionary<string, MyObject> myObjectDictionary = FillMyObjectDictionary();
var mySmallerObjectDictionary = myObjectDictionary.Skip(startNumber).Take(count);
//THE FOLLOWING DOES NOT WORK
Dictionary<string, MyObject> myNewObjectDictionary = (Dictionary<string, MyObject>)mySmallerObjectDictionary
答案 0 :(得分:18)
好吧,你可以创建一个新词典:
Dictionary<string, MyObject> myNewObjectDictionary =
myObjectDictionary.Skip(startNumber)
.Take(count)
.ToDictionary(pair => pair.Key, pair => pair.Value);
然而:
您不应该依赖字典的排序。目前尚不清楚您希望跳过哪些项目。考虑在OrderBy
之前使用Skip
。例如:
Dictionary<string, MyObject> myNewObjectDictionary =
myObjectDictionary.OrderBy(pair => pair.Key)
.Skip(startNumber)
.Take(count)
.ToDictionary(pair => pair.Key, pair => pair.Value);
这不保留原始字典中的任何自定义相等比较器。不幸的是,它没有暴露在任何地方,因此您只需要知道FillMyObjectDictionary
是否使用自定义比较器。
答案 1 :(得分:2)
Skip
/ Take
操作的结果不是IDictionary<string, MyObject>
,而是IEnumerable<KeyValuePair<string, MyObject>>
。
如果您想将其转换回字典,请尝试拨打ToDictionary
:
var myNewObjectDictionary = mySmallerObjectDictionary.ToDictionary(p => p.Key, p => p.Value);