Exemple #1
0
        public static Array Flatten(params object[] objs)
        {
            if (objs == null || objs.Length == 0)
            {
                return(Array.Create(new object[0]));
            }

            var flattened = objs.Cast <Data>().SelectMany(data => {
                IEnumerable <Data> flat(object obj)
                {
                    if (obj is ReferenceData reference)
                    {
                        return(flat(reference.UnpackReference(Compiler.RegenCompiler.CurrentContext)));
                    }
                    if (obj is Array r)
                    {
                        return(r.Values.SelectMany(flat).ToArray());
                    }
                    if (obj is IList l)
                    {
                        return(l.Cast <Data>().SelectMany(flat).ToList());
                    }
                    return(obj.YieldAs <Data>());
                }

                return(flat(data));
            }).ToArray();

            return(Array.Create(flattened));
        }
Exemple #2
0
        /// <summary>
        ///     Passing [1,2] , [3,4] will result in [1,1,2,2] [3,4,3,4]
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        /// <param name="excludeEquals"></param>
        /// <returns></returns>
        public static PackedArguments forevery(IList first, IList second, IList third, bool excludeEquals)
        {
            var retFirst  = new List <object>();
            var retSecond = new List <object>();
            var retThird  = new List <object>();

            foreach (var f in first)
            {
                foreach (var s in second)
                {
                    foreach (var t in third)
                    {
                        if (excludeEquals && (Equals(f, s) || Equals(f, t) || Equals(s, t)))
                        {
                            continue;
                        }

                        retFirst.Add(f);
                        retSecond.Add(s);
                        retThird.Add(t);
                    }
                }
            }

            return(new PackedArguments(Array.Create(retFirst), Array.Create(retSecond), Array.Create(retThird)));
        }
Exemple #3
0
        public static Array Except(IList @this, params object[] objs)
        {
            if (objs == null || objs.Length == 0)
            {
                return(Array.Create(@this));
            }

            var vals = @this.Cast <Data>().Where(left => objs.Any(right => !Equals(left.Value, right is Data d ? d.Value : right)));

            return(Array.Create(vals));
        }
Exemple #4
0
        public static Array Skip(IList @this, object count)
        {
            int intSkip = Common.ParseInt(count);

            if (@this == null || @this.Count == 0)
            {
                return(Array.Create(@this));
            }

            var vals = @this.Cast <Data>().Skip(intSkip);

            return(Array.Create(vals));
        }
Exemple #5
0
        public static Array SkipTake(IList @this, object skip, object take)
        {
            int intSkip = Common.ParseInt(skip);
            int intTake = Common.ParseInt(take);

            if (@this == null || @this.Count == 0)
            {
                return(Array.Create(@this));
            }

            var vals = @this.Cast <Data>().Skip(intSkip).Take(intTake);

            return(Array.Create(vals));
        }
Exemple #6
0
        public static Array RepeatElement(object obj, object times)
        {
            int repeats = Common.ParseInt(times);

            if (obj is ReferenceData r)
            {
                obj = r.Value;
            }

            if (obj is IList l)
            {
                return(Array.Create(Repeat(l.Cast <object>().Select(Data.Create), repeats)));
            }

            return(Array.Create(Enumerable.Repeat(obj is Data d ? d : Data.Create(obj), repeats)));
        }
Exemple #7
0
        public static Array Concat(IList @this, params object[] objs)
        {
            if (objs == null || objs.Length == 0)
            {
                return(Array.Create(@this));
            }

            var flattened = objs.Cast <Data>().SelectMany(CollectionSelector);

            return(Array.Create(@this.Cast <Data>().Concat(flattened)));

            IEnumerable <Data> CollectionSelector(Data data)
            {
                if (data is Array r)
                {
                    return((IList <Data>)r.Values);
                }
                if (data is IList l)
                {
                    return((IList <Data>)l.Cast <Data>().ToList());
                }
                return((IList <Data>) new[] { data });
            }
        }
Exemple #8
0
 public void array_create_singlenull()
 {
     Array.Create(null)
     .Should()
     .BeEmpty();
 }