如何从字典的列表中删除特定元素

3

我有一个字典

Dictionary <String, List<Object>> myDictionary;

什么是更新Dictionary的最佳方法,以便从列表中删除已知键的一个对象。例如,我想要从列表中删除第三个对象。
remove函数将根据特定键删除值。 因此,它将删除与该键对应的整个列表。 而我想要更新字典内部的列表。

我已经更新了我的答案,希望能够为您的问题提供解决方案。如果您需要进一步的协助,请让我知道。 - Markus Safar
谢谢你,马库斯。那很有帮助。使用 Lambda 表达式是否可能做到同样的事情? - Michael
以安全的方式,据我所知是不行的。你可以使用类似 dict["key1"] = dict["key1"].Where((item, index) => index != 3).ToList(); 的方法,但这要求 key 必须存在(否则会抛出 KeyNotFoundException 异常)。因此,这不是一个健壮的解决方案。 - Markus Safar
2个回答

1
您可以使用 Remove 方法。
myDictionary.Remove("key");

根据文档,该方法返回:
如果成功找到并删除元素,则返回true;否则返回false。如果在字典中未找到键,则此方法返回false。
更新:
根据您更新后的问题,您想要在列表中删除一个元素,这意味着首先获取字典的值,然后更改该值中的元素(在您的情况下,该值是一个列表)。因此,您可以在那里使用列表的RemoveAt方法。
List<Object> values;

if (myDictionary.TryGetValue("key", out values))
{
  // Here you have access to the list by using values, therefore you can modify your list here
  // Make sure, that the list really contains an element at index 3
  if (values.Count > 3)
      values.RemoveAt(3);
} 

抱歉,这个回答如何更新字典,以便从列表中删除一个对象? - Erik Philips
@ErikPhilips:它没有,因为当我第一次回答这个问题时,OP并没有说明他想要从列表中删除一个元素。在我回答之后,问题得到了更新 - 我也更新了我的答案;-) - Markus Safar
1
根据每个人都可以查看的问题历史记录(https://stackoverflow.com/posts/53309955/revisions),问题本身并没有改变... - Erik Philips
@ErikPhilips,你说得对,看起来我读得太快了... 我确信列表中没有提到对象,但现在已经很晚了,也许我应该去睡觉了;-) - Markus Safar

1
更新字典,以便从列表中删除一个对象?
首先,您需要从字典中检索列表,例如,您可以使用键。它可能是这样的:
if (myDictionary.TryGetValue("key", out List<Object> value)) {
  value.RemoveAt(2);
}

你可以使用TryGetValue根据键获取值(如果存在,则可以获取List<object>引用)。
由于上面示例中value的引用与Dictionary<>使用的引用相同,因此您可以使用List.RemoveAt(Int32)从列表中删除第三个。

投票支持此回答并且OP已经评论说:“remove将会删除特定键的值。因此,它将删除与该键相应的整个列表。而我希望更新字典内部的列表。” - Markiian Benovskyi
@MarkiianBenovskyi 经常会发生人们不读问题,根据假设编写答案实际上不能回答问题的情况。 - Erik Philips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接