示例#1
0
 /// <summary>
 /// Ctor
 /// </summary>
 internal Lst(IEnumerable <T> initial)
 {
     if (initial is Lst <T> )
     {
         var lst = (Lst <T>)initial;
         Root = lst.Root;
         Rev  = lst.Rev;
     }
     else
     {
         var lst = new List <T>(initial);
         Root = ListModule.FromList(lst, 0, lst.Count());
         Rev  = false;
     }
 }
示例#2
0
        public LstInternal <A> Filter(Func <A, bool> pred)
        {
            var filtered = new List <A>();

            foreach (var item in this)
            {
                if (pred(item))
                {
                    filtered.Add(item);
                }
            }
            var root = ListModule.FromList(filtered, 0, filtered.Count);

            return(Wrap(root, Rev));
        }
示例#3
0
        /// <summary>
        /// Insert range of values at specified index
        /// </summary>
        public Lst <T> InsertRange(int index, IEnumerable <T> items)
        {
            if (items == null)
            {
                return(this);
            }
            if (index < 0 || index > Root.Count)
            {
                throw new IndexOutOfRangeException();
            }

            var lst  = new List <T>(Rev ? items.Reverse() : items);
            var tree = ListModule.FromList(lst, 0, lst.Count);

            return(new Lst <T>(ListModule.Insert(Root, tree, Rev ? Count - index - 1 : index), Rev));
        }
示例#4
0
 /// <summary>
 /// Ctor
 /// </summary>
 internal LstInternal(IEnumerable <A> initial, Pred <A> pred)
 {
     hashCode  = 0;
     this.root = ListItem <A> .Empty;
     if (initial is Lst <A> )
     {
         var lst = (Lst <A>)initial;
         this.root = lst.Value.Root;
         Rev       = lst.Value.Rev;
     }
     else
     {
         var lst = new List <A>(initial);
         foreach (var item in lst)
         {
             if (!pred.True(item))
             {
                 throw new ArgumentOutOfRangeException("item in list");
             }
         }
         this.root = ListModule.FromList(lst, 0, lst.Count());
         Rev       = false;
     }
 }
示例#5
0
        public LstInternal <A> InsertRange(int index, IEnumerable <A> items, Pred <A> pred)
        {
            if (items == null)
            {
                return(this);
            }
            if (index < 0 || index > Root.Count)
            {
                throw new IndexOutOfRangeException();
            }

            var lst = new List <A>(Rev ? items.Reverse() : items);

            foreach (var item in items)
            {
                if (!pred.True(item))
                {
                    throw new ArgumentOutOfRangeException(nameof(items));
                }
            }
            var tree = ListModule.FromList(lst, 0, lst.Count);

            return(Wrap(ListModule.Insert(Root, tree, Rev ? Count - index - 1 : index), Rev));
        }
示例#6
0
 /// <summary>
 /// Convert an LanguageExt List (IImmutableList<T>) into an F# List
 /// </summary>
 public static FSharpList <T> fs <T>(IImmutableList <T> list) =>
 ListModule.OfSeq(list);
示例#7
0
 /// <summary>
 /// Convert an F# List into an IEnumerable<T>
 /// </summary>
 public static IEnumerable <T> fs <T>(FSharpList <T> fsList) =>
 ListModule.ToSeq(fsList);
示例#8
0
 public LstInternal <U> Map <U>(Func <A, U> map) =>
 new LstInternal <U>(ListModule.Map(Root, map), Rev);
示例#9
0
 public LstInternal <A> Add(A value) =>
 Wrap(ListModule.Insert(Root, value, Rev ? 0 : Root.Count), Rev);
示例#10
0
 /// <summary>
 /// Map
 /// </summary>
 public Lst <U> Map <U>(Func <T, U> map) =>
 new Lst <U>(ListModule.Map(Root, map), Rev);
示例#11
0
 /// <summary>
 /// Add an item to the end of the list
 /// </summary>
 public Lst <T> Add(T value) =>
 new Lst <T>(ListModule.Insert(Root, value, Rev ? 0 : Root.Count), Rev);
示例#12
0
 public LstInternal <A> RemoveAll(Func <A, bool> pred) =>
 Wrap(ListModule.Remove(Root, pred));
示例#13
0
 public LstInternal <A> Remove(A value, IEqualityComparer <A> equalityComparer) =>
 Wrap(ListModule.Remove(Root, value, equalityComparer));
示例#14
0
 /// <summary>
 /// Convert an LanguageExt List (Lst T) into an F# List
 /// </summary>
 public static FSharpList <T> ToFSharp <T>(this Lst <T> list) =>
 ListModule.OfSeq(list);
示例#15
0
 /// <summary>
 /// Convert an LanguageExt List (Lst T) into an F# List
 /// </summary>
 public static FSharpList <T> fs <T>(Lst <T> list) =>
 ListModule.OfSeq(list);