> public static void Main() > { > > > Dictionary<int, Tuple<int, int, int>> dict = new Dictionary<int, Tuple<int, int, int>>(); > > Tuple<int, int, int> t; // key is tuple.Item1 > > t = new Tuple<int, int, int>(1, 1, 1); > UpdateDictionary(dict, t); > > t = new Tuple<int, int, int>(2, 1, 1); > UpdateDictionary(dict, t); > > PrintDictionary("Before any update", dict); > > t = new Tuple<int, int, int>(2, 2, 2); > UpdateDictionary(dict, t); > > PrintDictionary("After update", dict); > Console.ReadLine(); > } > static void UpdateDictionary(Dictionary<int, Tuple<int, int, int>> dict, Tuple<int, int, int> t) > { > if (dict.ContainsKey(t.Item1) ) > { > dict[t.Item1] = t; > } > else > dict.Add(t.Item1, t); > } > static void PrintDictionary(string msg, Dictionary<int, Tuple<int, int, int>> dict) > { > Console.WriteLine(msg); > foreach (KeyValuePair<int, Tuple<int, int, int>> x in dict) > { > Console.WriteLine("{0} {1} {2}", x.Value.Item1, x.Value.Item2, x.Value.Item3); > } > > } >Since the key is in the data I'd consider using KeyedCollection instead of Dictionary ?