3

タイトルはほとんどそれを言います。C# のベース Dictionary クラスに単純な拡張メソッドを追加したいと考えています。最初は、Stack メソッドのような名前を Pop(TKey key) と名付けようとしていましたが、ルックアップに使用するキーを受け入れます。

次に、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」と呼ばれます。しかし、それはひどい名前です。共有タプルスペースの観点から名前を付けたため、基本的に逆の名前が付けられていました。だから、気にしないでください。

抽出は優れており、「ポップ」も非常に明白です(スタックではなくても、ほぼ誰でもあなたが何をしているかを知っているでしょう)。

于 2008-11-14T05:03:56.480 に答える