Domanda

Il titolo lo dice principalmente. Voglio aggiungere un semplice metodo di estensione alla classe del dizionario di base in C #. All'inizio lo avrei chiamato Pop (chiave TKey), un po 'come il metodo Stack, ma accetta una chiave da usare per la ricerca.

Quindi stavo per fare Take (tasto TKey), ma coincide con il metodo LINQ con lo stesso nome ... e sebbene C # 3.0 ti permetta di farlo, non mi piace.

Quindi, cosa ne pensi, basta attenersi a Pop o esiste un termine migliore per "trovare e rimuovere un elemento"?

(Mi sento un po 'imbarazzato nel porre questa domanda, mi sembra una cosa così banale ... ma mi piace usare gli standard e non ho una vasta esperienza con molte lingue / ambienti.)

EDIT: mi dispiace, avrei dovuto spiegare di più .... In questo caso non posso usare il termine Remove poiché è già definito dalla classe che sto estendendo con un nuovo metodo.

EDIT 2: Okay, ecco cosa ho finora, ispirato dalla saggezza della folla per così dire:

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;
}
È stato utile?

Soluzione

Calcolo Estrai , come quando gli archeologi trovano una mummia nel terreno, rimuovila e poi ritorna in un museo :)

Altri suggerimenti

qualcosa di particolarmente sbagliato con Rimuovi (chiave ) metodo già fornito?

oh aspetta, vuoi restituire anche l'elemento rimosso? che ne dici di

object valueRemoved = someDictionary.RemoveElement(key)

facilmente implementabile come

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

La mia prima ipotesi sarebbe stata " Take " ;, ma come hai sottolineato, questo è già stato preso. I miei prossimi suggerimenti sarebbero " Estrai " o " Stacca " ;, ma possono essere ambigui.

Che ne dici di " Prelievo " o " PullOut " ;?

Questa azione ricorda leggermente una vecchia piattaforma di collaborazione (principalmente accademica) chiamata Linda . In quell'ambiente, ciò di cui stai parlando si chiamerebbe "in". Ma questo è un nome terribile per questo - sostanzialmente avevano i nomi al contrario perché li hanno nominati dal punto di vista dello spazio tupla condiviso. Quindi, non importa.

L'estrazione è buona e " Pop " è anche abbastanza ovvio (quasi tutti saprebbero cosa stavi facendo, anche se non è uno stack).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top