Термин «найти, удалить и вернуть элемент» в наборе? - PullRequest
3 голосов
/ 14 ноября 2008

Название говорит это в основном. Я хочу добавить простой метод расширения в базовый класс Dictionary в C #. Сначала я собирался назвать его 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 ]

8 голосов
/ 14 ноября 2008

Я считаю Извлечение , как когда археологи Найдите мумию в земле Удалите ее , а затем Верните это в музей :)

1 голос
/ 14 ноября 2008

Это действие немного напоминает старую платформу для совместной работы (в основном академическую) под названием Линда . В этой среде то, о чем вы говорите, будет называться «в». Но это ужасное имя для них - у них были имена в основном назад, потому что они называли их с точки зрения общего пространства кортежей. Итак, неважно.

Извлечение - это хорошо, и «Pop» также довольно очевиден (любой может знать, что вы делаете, даже если это не стек).

1 голос
/ 14 ноября 2008

Моим первым предположением было бы «Взять», но, как вы указали, это уже сделано. Моими следующими предложениями будут «Извлечь» или «Отделить», но они могут быть неоднозначными.

Как насчет "Снять" или "PullOut"?

1 голос
/ 14 ноября 2008

Что-нибудь конкретно не так с методом Удалить (ключ), уже предоставленным?

Ой, подождите, вы также хотите вернуть удаленный элемент? как насчет

object valueRemoved = someDictionary.RemoveElement(key)

легко реализуется как

if (!dict.ContainsKey(key))
{
    return null;
}
object val = dict[key];
dict.Remove(key);
return val;
...