Ejemplo n.º 1
0
        private static RecursiveDictionary <TResult> SelectRecursive_ <TSource, TResult>(int depth,
                                                                                         TSource parent, TResult parentResult,
                                                                                         RecursiveDictionary <TSource> dictionary,
                                                                                         SelectRecursiveDelegate <TSource, TResult> selector)
        {
            var parentKvp = parent.PairWithValue(parentResult);
            var value     = dictionary
                            .Aggregate(
                new KeyValuePair <
                    KeyValuePair <TResult, RecursiveDictionary <TResult> >,
                    KeyValuePair <TSource, TResult> >[] { },
                (left, v) =>
            {
                var result = selector(depth, parentKvp,
                                      left.SelectValues().ToArray(),
                                      v.Key);
                var subset    = SelectRecursive_(depth + 1, v.Key, result, v.Value, selector);
                var resultSet = result.PairWithValue(subset);
                return(left.Append(resultSet.PairWithValue(v.Key.PairWithValue(result))).ToArray());
            })
                            .SelectKeys()
                            .AsRecursive();

            return(value);
        }
Ejemplo n.º 2
0
 public static RecursiveDictionary <TResult> SelectRecursive <TSource, TResult>(this RecursiveDictionary <TSource> dictionary,
                                                                                SelectRecursiveDelegate <TSource, TResult> selector)
 {
     if (dictionary.IsDefault())
     {
         return(default(RecursiveDictionary <TResult>));
     }
     return(SelectRecursive_(0,
                             default(TSource), default(TResult),
                             dictionary,
                             selector));
 }