我对字典进行了如下排序:
var sortedListOfNodes = _nodeDictionary.Values.OrderBy((n) => n.Time);
然后我选择了一个这样的元素:
var selectedNode = sortedListOfNodes.First(n => n.Time - CurrentTime > new TimeSpan(1,0,0));
然后,我对该节点进行了一些处理,最后想从列表中删除该节点,而又不破坏排序顺序。
以下内容将保持顺序吗?
sortedListOfNodes = (IOrderedEnumerable<Node>)sortedListOfNodes.Where(node => node != selectedNode);
最佳答案
在ToList
之后将呼叫添加到OrderBy
。现在您有了可以操作的列表(假设您不插入任何项目,它将保持顺序)。
var sortedListOfNodes = _nodeDictionary.Values.OrderBy((n) => n.Time).ToList();
var selectedNode = sortedListOfNodes.First(n => n.Time - CurrentTime > new TimeSpan(1,0,0));
sortedListOfNodes.Remove(selectedNode);
附带说明一下,将
Where
的结果强制转换为IOrderedEnumerable<Node>
的示例在运行时将因强制转换失败而失败。您正在调用的Where
是不实现该接口的具体类型。