public static ICountableCollection <T> Select <T>(this ICountableCollection <T> collection, Func <T, T> transformer) { var result = new CountableCollection <T>(); foreach (KeyValuePair <T, int> keyValuePair in collection) { result.Add(transformer(keyValuePair.Key), keyValuePair.Value); } return(result); }
public bool TryExchange(IDecreasingOrderCollection <int> availableValues, int valueForExchange, out ICountableCollection <int> result) { result = new CountableCollection <int>(); foreach (int availableValue in availableValues.DecreasingOrder()) { if (valueForExchange == 0) { return(true); } if (valueForExchange >= availableValue) { valueForExchange -= availableValue; result.Add(availableValue, 1); } } return(valueForExchange == 0); }