>>> 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 ?