0
的变化比方说,我有一个词汇使词汇的键
public Dictionary<int, List<string>> dict = new Dictionary<int, List<string>>();
键 - 1,...,N
现在我想删除假设第5个元素,而是要保持正常记数。
为了有1,2,3,4,5,6,7,8,9 .... 代替1,2,4,6,7,8,9,...
如何做到这一点?
的变化比方说,我有一个词汇使词汇的键
public Dictionary<int, List<string>> dict = new Dictionary<int, List<string>>();
键 - 1,...,N
现在我想删除假设第5个元素,而是要保持正常记数。
为了有1,2,3,4,5,6,7,8,9 .... 代替1,2,4,6,7,8,9,...
如何做到这一点?
您可以定义此实用程序方法:
public static IDictionary<int, T> RemoveItem<T>(IDictionary<int, T> dict, int key)
{
return dict.Where(kv => kv.Key != key)
.ToDictionary(kv => kv.Key > key ? kv.Key - 1 : kv.Key,
kv => kv.Value);
}
然后就是这样称呼它:
var twoRemoved = RemoveItem(dict, 2);
请注意,这并不修改原始字典对象,而是创建一个新的与key
后的按键向下移动1,删除键值为key
的原始项目。
这里有一个版本,不修改原始字典,可以提供稍好的性能和内存使用情况:
public static void RemoveItem2<T>(IDictionary<int, T> dict, int key)
{
dict.Remove(key);
T item;
while (dict.TryGetValue(++key, out item))
{
dict.Remove(key);
dict[key - 1] = item;
}
}
你不能只用一个列表,而不是?索引将“保持正常计数” –
使用'Dictionary'在这里并不是很好,因为它不妨碍任何顺序。你应该看看'SortedList' –
MarcinJuraszek
我自己通过索引。 – Mike