2016-07-07 2 views
2

2つの同様のキーを持つ辞書があります。スペルミスがあり、別のキーが作成されています。その値を合計し、スペルが間違っているキー/値ペアを削除します。 。特定のキーのディクショナリの合計値C#

部門名をキーとし、その部門の人数を値として、部門の辞書がある場合は、「Marketing」と「Marketin」の値を合計して、スペルミスのキー/値のペア "Marketin"。

 var departments = new Dictionary<string, int>() 
     { 
      { "HR", 33 }, 
      { "Management", 8 }, 
      { "Marketing", 25 }, 
      { "Sales", 44 } 
     }; 

辞書がすでに作成されているので、私は例示のみの目的のために初期化を使用:

 var departments = new Dictionary<string, int>() 
     { 
      { "HR", 33 }, 
      { "Management", 8 }, 
      { "Marketing", 21 }, 
      { "Marketin", 4 }, 
      { "Sales", 44 } 
     }; 

私はこのようにして辞書をしたいと思います。

+2

どこから入力したのですか?このデータは最終的に書き戻される必要があるデータベースにありますか?ソースでタイプミスを修正するのは賢明ではありませんか? –

+0

これは、結局のところ、ダッシュボードにいくつかのデータを表示しただけです。だから、私は最終的にそれをデータベースであるソースに修正します。 – miken

+0

コードハッキングを明示的に修正して、makeが行った間違いを修正するだけで、バンド広告のWebが生成されます。あなたのコードではなくデータを修正する必要があります。 –

答えて

3
departments["Marketing"] += departments["Marketin"]; 

departments.Remove("Marketin"); 
+0

これはトリックでした。 Philに感謝します。 – miken

0

ここでは、目的に応じて使用できる辞書機能を示すコードサンプルを示します。

正確な目的を達成するためにこれらの機能をどのように組み合わせて使用​​する必要があるかについては、練習問題として残しておきます。あなたはもっと助けが必要な場合。あなたが理解していないことを正確に説明するコメントを残してください。

//how to get a value in your dictionary 
string myValue = departments["Marketin"]; 

//how to update a value in your dictionary 
departments["Marketing"] = 5; 

//how to remove a value in your dictionary 
departments.Remove("Marketin"); 

//how to iterate over your dictionary 
foreach(var department in departments) 
{ 
    //only print the value if it's "Marketin" 
    if(department.Key == "Marketin") 
    { 
     Console.WriteLine(department.Value); 
    } 
} 
0

私は「マーケティング」と「Marketin」の値を合計し、スペルミスのキー/値のペア「Marketin」を削除したいと思います。

ここでは、ユーザーが問題のテキストと適切なテキストを特定し、不適切なものを削除して値を適切なキーの値に加算(合計)します。最終的な結果で

var departments = new Dictionary<string, int>() 
{ 
    { "HR", 33 }, 
    { "Management", 8 }, 
    { "Marketing", 21 }, 
    { "Marketin", 4 }, 
    { "Sales", 44 } 
}; 

var baseText = "Market"; 
var validText = "Marketing"; 

var removal = departments.ToList() 
         .Where(itm => itm.Key.StartsWith(baseText) && 
             itm.Key.Equals(validText) == false) 
         .ToList(); 

removal.ForEach(itm => departments.Remove(itm.Key)); 

departments[validText] += removal.Sum(itm => itm.Value); 

:それは他の不正な形式を認識できるように、あなたはノーマライズ方法を微調整することができます

var normalisedDepartments = 
    departments.GroupBy(x => Normalise(x.Key), y => y.Value) 
      .ToDictionary(x => x.Key, y => y.Sum()); 

    private static string Normalise(string key) 
    { 
     if (key == "Marketin") 
     { 
      return "Marketing"; 
     } 
     return key; 
    } 

enter image description here

+0

これは最善のアイデアではありませんMarketPlaceのような同じプレフィックスを持つ他の部門については、ここにすべてのデータがありません。明示する方が良いです –

+0

@ johnny5このコードは、使用方法に生成することができます他の部門キーに私は現在の仕様にのみコーディングしています。 – OmegaMan

+0

早すぎる最適化はすべての悪の根源です。 –

1

はここで、より "一般的" 方法のための私のスケッチですキーがあります。

関連する問題