private static Occurrences Subtract(Occurrences x, Occurrences y) { var xm = x.ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2); var ym = y.ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2); var zm = new Dictionary <char, int>(); foreach (var kvp in xm) { var c = kvp.Key; var nx = kvp.Value; int ny; zm[c] = (ym.TryGetValue(c, out ny)) ? nx - ny : nx; } return(zm .Where(kvp => kvp.Value > 0) .Select(kvp => Tuple.Create(kvp.Key, kvp.Value)) .OrderBy(tuple => tuple.Item1)); }