예제 #1
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb548651(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <param name="func"></param>
 /// <returns></returns>
 public static Bag <Option <T> > Aggregate <T>(this Bag <T> input, Func <T, T, T> func)
 => input
 .Select(OptionX.Option)
 .Aggregate(new Option <T>(), func.OptionBinaryFunc());
예제 #2
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb534972(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <param name="f"></param>
 /// <returns></returns>
 public static Bag <bool> Any <T>(this Bag <T> input, Func <T, bool> f)
 => input.Select(f).AnyTrue();
예제 #3
0
 public static Bag <Option <T> > Average <P, T>(this P policy, Bag <T> input)
     where P : struct, INumericPolicy <T>
 => input
 .Select(v => Tuple.Create(v, 1L))
 .Aggregate((a, b) => Tuple.Create(policy.Plus(a.Item1, b.Item1), a.Item2 + b.Item2))
 .Select(x => x.Select(v => policy.Div(v.Item1, policy.FromLong(v.Item2))));
예제 #4
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb338038(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <returns></returns>
 public static Bag <long> Count <T>(this Bag <T> input)
 => input.Select(_ => 1L).Sum();
예제 #5
0
 public static Bag <KeyValuePair <K, T> > SelectWithKey <K, T>(this Bag <T> bag, Func <T, K> f)
 => bag.Select(v => f(v).WithValue(v));
예제 #6
0
 public static Bag <KeyValuePair <K, T> > SelectValue <K, I, T>(
     this Bag <KeyValuePair <K, I> > bag, Func <I, T> f)
 => bag.Select(v => v.Key.WithValue(f(v.Value)));
예제 #7
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <returns></returns>
 public static Bag <T> Distinct <T>(this Bag <T> input)
 => input
 .Select(v => v.WithValue(new Void()))
 .GroupBy((a, _) => a)
 .Select(v => v.Key);
예제 #8
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb534493(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="K"></typeparam>
 /// <typeparam name="V"></typeparam>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <param name="key"></param>
 /// <param name="value"></param>
 /// <param name="reduce"></param>
 /// <returns></returns>
 public static Bag <KeyValuePair <K, V> > GroupBy <K, V, T>(
     this Bag <T> input, Func <T, K> key, Func <T, V> value, Func <V, V, V> reduce)
 => input.Select(v => key(v).WithValue(value(v))).GroupBy(reduce);
예제 #9
0
 private static Bag <KeyValuePair <T, Counters> > ToMultiSet <T>(
     this Bag <T> input, long a, long b)
 => input.Select(v => v.WithValue(new Counters(a, b)));