2012-03-27 18 views
5

辞書を使用していくつかのキーの値のペアを保存していて、辞書を作成する最良の方法について質問がありました。キー値ペアを見つけて辞書に追加するには、他の操作を行う必要があります。これらの操作の後、私は辞書に追加するキー/値を見つけたかもしれません。何も見つからなかったかもしれません。私の質問は、どのように私は辞書に移入する必要があります。見つかった場合はキー値のペアを返す関数を使用する必要があります。それ以外の場合は、辞書に含まれている空の値を返します.Add(function())call?私は空のキー/値のペアを辞書に追加したくないので、その関数のリターンコールがどのように機能するかはわかりません。または、関数に辞書を渡して、必要に応じて追加する必要がありますか?以下のように、ここで辞書にキー/値のペアを追加する

function(dictionary) 
{ if (pair found) {dictionary.add(pair)}} 
+1

を?既にストレージを管理しており、キーの存在を確認するためのContainsKeyメソッドがあり、LINQを使用してKeyValuePair のエントリを返すことができますか? –

+0

辞書オブジェクトを設定する最適な方法を探しています。それを設定するためには、私はいくつかの操作を実行して、オブジェクトをディクテーションに配置する必要があります。したがって、私はメソッドにこれらの操作をプッシュし、それはdicに追加するには、キー値のペアを返す必要がありますか?または新しく作成されたdictを渡して、値が見つかった場合はそれを関数に渡してそれに追加する必要がありますか? –

+0

これは本当にこの方法で何をしようとしているのか、その能力を持つべきかどうかによって異なります。私の理解から、私は辞書をプッシュして、メソッドがその作業をするようにします。実装するのが一番簡単です。 –

答えて

10

ないあなたがここに頼むかわからしかし、私は、キーに基づいて値を追加または更新するために、いずれかの辞書を処理する方法である:

string key = "some key here"; 
string value = "your value"; 
if (myDict.ContainsKey(key)) 
{ 
    myDict[key] = value; 
} 
else 
{ 
    myDict.Add(key, value); 
} 

ます場合は、この方法でこれをラップすることができます以下のように:

void AddOrUpdate(Dictionary<string, string> dict, string key, string value) 
{ 
    if (dict.ContainsKey(key)) 
    { 
     dict[key] = value; 
    } 
    else 
    { 
     dict.Add(key, value); 
    } 
} 

//usage: 
AddOrUpdate(myDict, "some key here", "your value"); 

またTryGetValueメソッドを使用することができますが、この内の任意の明白な利点を見ることができません。

+2

私は何かが欠けているかもしれませんが、dict [key] = valueは値を追加または更新します(setは "private void Insert(TKey key、TValue value、bool add)"を呼び出します)。 – user276648

+0

@ user276648私は感覚の大きなチャックを欠いていました、あなたはまったく正しいです!私は古典的なASPで辞書を使って作業していましたが、ちょうど立ち往生した構文を推測しました。簡単な方法で新しい回答を投稿して、他の人が設定者を知るようにしてください。拡張メソッドのために+1 –

3

あなたの疑似コードが正しいです。

public void Process(bool add, Dictionary<string, string> dictionary) 
{ 
    if(add) dictionary.Add("added", "value"); 
} 

あなたはまた、拡張メソッドを使用できます。ネイティブ辞典<処理鍵、TValue>を使用しないのはなぜ

static class Program 
{ 
    public static void AddIfNotNull(this Dictionary<string,object> target, string key, object value) 
    { 
     if(value != null) 
      target.Add(key, value); 
    } 

    static void Main(string[] args) 
    { 
     var dictionary = new Dictionary<string, object>(); 

     dictionary.AddIfNotNull("not-added", null); 
     dictionary.AddIfNotNull("added",  "true"); 

     foreach(var item in dictionary) 
      Console.WriteLine(item.Key); 

     Console.Read(); 
    } 

} 
+0

+1、それについて考えなかった。 :) –