3

标题主要说明了这一点。我想在 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;
}
4

4 回答 4

8

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

于 2008-11-14T04:48:47.683 回答
1

已经提供的 Remove(key) 方法有什么特别的问题吗?

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

object valueRemoved = someDictionary.RemoveElement(key)

很容易实现为

if (!dict.ContainsKey(key))
{
    return null;
}
object val = dict[key];
dict.Remove(key);
return val;
于 2008-11-14T04:36:41.433 回答
1

我的第一个猜测是“接受”,但正如你所指出的,那已经被接受了。我的下一个建议是“提取”或“分离”,但它们可能是模棱两可的。

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

于 2008-11-14T04:44:05.880 回答
1

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

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

于 2008-11-14T05:03:56.480 回答