集合中“查找、删除和返回元素”的术语?

Posted

技术标签:

【中文标题】集合中“查找、删除和返回元素”的术语?【英文标题】:Term for "find, remove and return an element" in a set? 【发布时间】:2010-09-22 07:13:28 【问题描述】:

标题主要说明了这一点。我想在 C# 中的 Dictionary 基类中添加一个简单的扩展方法。一开始我打算把它命名为 Pop(TKey key),有点像 Stack 方法,但它接受一个用于查找的键。

那我本来打算做Take(TKey key),但是和同名的LINQ方法不谋而合……虽然C# 3.0可以让你做,但我不喜欢。

那么,您认为,还是坚持使用 Pop 还是有更好的术语来表示“查找并删除元素”?

(我觉得问这个问题有点尴尬,这似乎是一件微不足道的事情......但我喜欢使用标准,并且我对许多语言/环境没有丰富的经验。)

编辑:对不起,应该解释更多......在这种情况下,我不能使用术语删除,因为它已经由我使用新方法扩展的类定义。

编辑 2:好的,这就是我目前所拥有的,受到群众智慧的启发:

public static TValue Extract<TKey, TValue>
(
    this Dictionary<TKey, TValue> dict,
    TKey key
)

    TValue value = dict[key];
    dict.Remove(key);
    return value;


public static bool TryExtract<TKey, TValue>
(
    this Dictionary<TKey, TValue> dict,
    TKey key,
    out TValue value
)

    if( !dict.TryGetValue(key, out value) )
    
        return false;
    
    dict.Remove(key);
    return true;

【问题讨论】:

这个问题一点都不简单。最好提前选择一个好名字,然后不得不忍受它多年(或者更糟,让别人忍受它) 【参考方案1】:

我认为提取,就像考古学家在地下找到一具木乃伊时,将其移除然后返回它去博物馆:)

【讨论】:

您先生,提出了一个非常强有力的论据。我喜欢这个比喻。此外,这也是军队进入撤军时所说的。 是的,extract 比 RemoveElement 好【参考方案2】:

Remove(key) method already provided? 有什么特别的问题

哦,等等,你也想返回删除的元素吗?怎么样

object valueRemoved = someDictionary.RemoveElement(key)

很容易实现为

if (!dict.ContainsKey(key))

    return null;

object val = dict[key];
dict.Remove(key);
return val;

【讨论】:

好吧,它不返回元素,所以它总是两行代码(先检索然后删除),这是我可能在项目中做数千次的事情,所以我想对于标准扩展方法来说,这不是一个坏主意。 另外,对不起,如果我在你回答之前更改了标题,它之前说的是“查找并删除”,而不是“查找,删除并返回”。 删除元素,很酷。这可能会奏效,尽管如果出现较短的名称,我可能会跳过它!我回去工作时会考虑一下,看看这里还会出现什么。 @wizlb:如果您知道密钥存在,则只需 2 行代码 ;-) 我知道,但是 C# 没有扩展宏(而且我真的很懒)。我想我也可以使用 sn-p...【参考方案3】:

我的第一个猜测是“接受”,但正如您所指出的,这已经被接受了。我的下一个建议是“提取”或“分离”,但它们可能不明确。

“退出”或“退出”怎么样?

【讨论】:

其实,也许我会使用 TakeItem,在我真正想使用的方法之后添加 Item,就像上面 Steven A. Lowe 建议的那样。因此,如果我使用它,这对你们俩来说都是一半的功劳:) 我只会增加你的答案,而不是将任何人标记为这个问题的“回答者”。 好的,你是最初的 Extract 人,我想在应得的地方给予赞扬。但马克的类比确实吸引了我。无论如何,每个人都从我这里得到一点:)【参考方案4】:

这个动作有点让人想起一个叫做Linda的旧协作平台(主要是学术)。在那种环境下,你所说的将被称为“in”。但这是一个糟糕的名字——他们基本上把名字倒过来了,因为他们从共享元组空间的角度来命名它们。所以,没关系。

Extract 很好,“Pop”也很明显(几乎任何人都会知道你在做什么,即使它不是堆栈)。

【讨论】:

优秀。我总是很高兴从可能在这些问题上受过正规教育的人那里得到一些意见,因为我完全是自学成才的。我想我现在会坚持使用 Extract,因为它还有一个相关的方法 bool TryExtract(TKey key, out TValue value) 和 TryPop 对我来说听起来很奇怪:)

以上是关于集合中“查找、删除和返回元素”的术语?的主要内容,如果未能解决你的问题,请参考以下文章

数据结构基本概念和术语

Java—集合02

图 - 定义和术语总结

集合之Iterator迭代器

00078_迭代器

Iterator迭代器与增强for循环