一组中“查找,删除和返回元素”的术语?

时间:2008-11-14 04:34:21

标签: data-structures programming-languages naming-conventions terminology naming

标题主要是说。我想在C#中向基类Dictionary类添加一个简单的扩展方法。起初我将其命名为Pop(TKey键),有点像Stack方法,但它接受用于查找的键。

然后我要做Take(TKey键),但它与同名的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 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

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;

答案 2 :(得分:1)

我的第一个猜测是“Take”,但正如你所指出的那样,已经采取了这种做法。我的下一个建议是“Extract”或“Detach”,但它们可能含糊不清。

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

答案 3 :(得分:1)

此操作略微让人联想到一个名为Linda的旧协作平台(主要是学术界)。在那种环境中,你所谈论的内容将被称为“in”。但这对它来说是一个可怕的名字 - 它们基本上都有名称向后,因为他们从共享元组空间的角度命名它们。所以,没关系。

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