예제 #1
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb534336(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="I"></typeparam>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <param name="func"></param>
 /// <returns></returns>
 public static Bag <T> SelectMany <I, T>(this Bag <I> input, Func <I, IEnumerable <T> > func)
 => new SelectMany <I, T>(input, func);
예제 #2
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb548891(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="I"></typeparam>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <param name="func"></param>
 /// <returns></returns>
 public static Bag <T> Select <I, T>(this Bag <I> input, Func <I, T> func)
 => input.SelectMany(i => new[] { func(i) });
예제 #3
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb302894(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Bag <T> DisjointUnion <T>(this Bag <T> a, Bag <T> b)
 => new DisjointUnion <T>(a, b);
예제 #4
0
 public SelectMany(Bag <I> input, Func <I, IEnumerable <T> > func)
 {
     Input = input;
     Func  = func;
 }
예제 #5
0
 public static Bag <KeyValuePair <K, T> > WhereValue <K, T>(
     this Bag <KeyValuePair <K, Option <T> > > bag)
 => bag.SelectMany(p => p.Value.Select(v => p.Key.WithValue(v)).ToEnum());
예제 #6
0
 public static Bag <KeyValuePair <K, Pair <A, B> > > Right <K, A, B>(
     this Bag <KeyValuePair <K, Pair <A, Option <B> > > > bag)
 => bag.SelectValue(v => v.B.Select(b => v.A.WithB(b))).WhereValue();
예제 #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
 public Bag <R> Visit <T>(Bag <T> bag)
 => bag.SelectMany(i => i is R ? new[] { (R)(object)i } : Enumerable.Empty <R>());
예제 #9
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb549393(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="K"></typeparam>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <param name="key"></param>
 /// <param name="reduce"></param>
 /// <returns></returns>
 public static Bag <KeyValuePair <K, T> > GroupBy <K, T>(
     this Bag <T> input, Func <T, K> key, Func <T, T, T> reduce)
 => input.GroupBy(key, v => v, reduce);
예제 #10
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);
예제 #11
0
 public static Bag <KeyValuePair <K, T> > GroupBy <K, T>(
     this Bag <KeyValuePair <K, T> > input, Func <T, T, T> func)
 => new GroupBy <K, T>(input, func);
예제 #12
0
 public GroupBy(Bag <KeyValuePair <K, T> > input, Func <T, T, T> func)
 {
     Input = input;
     Func  = func;
 }
예제 #13
0
 public static Bag <KeyValuePair <K, Pair <A, B> > > Inner <K, A, B>(
     this Bag <KeyValuePair <K, Pair <Option <A>, Option <B> > > > bag)
 => bag.Left().Right();
예제 #14
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb534803(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <param name="func"></param>
 /// <returns></returns>
 public static Bag <T> Where <T>(this Bag <T> input, Func <T, bool> func)
 => input.SelectMany(i => func(i) ? Enumerable.Empty <T>() : new[] { i });
예제 #15
0
 public Product(Bag <A> a, Bag <B> b)
 {
     InputA = a;
     InputB = b;
 }
예제 #16
0
 /// <summary>
 /// See also https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="input"></param>
 /// <returns></returns>
 public static Bag <T> OfType <T>(this Bag input)
 => input.Accept(new OfTypeVisitor <T>());
예제 #17
0
 public static Bag <Tuple <A, B> > Product <A, B>(this Bag <A> a, Bag <B> b)
 => new Product <A, B>(a, b);
예제 #18
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)));
예제 #19
0
 public DisjointUnion(Bag <T> inputA, Bag <T> inputB)
 {
     InputA = inputA;
     InputB = inputB;
 }
예제 #20
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));
예제 #21
0
 public static Bag <KeyValuePair <K, Pair <A, B> > > Left <K, A, B>(
     this Bag <KeyValuePair <K, Pair <Option <A>, B> > > bag)
 => bag.SelectValue(v => v.A.Select(a => a.WithB(v.B))).WhereValue();