- A no-GC version of C#'s
IEnumerator<T>
and LINQ - Inspired by C++'s
<iterator>
and<algorithm>
headers - Useful for any C# project with additional support for Unity
Clone or download this repository and copy the JacksonDunstanIterator
directory somewhere inside your Unity project's Assets
directory.
Clone or download this repository and add all the .cs
files directly under the JacksonDunstanIterator
directory to your C# project.
There are three iterator types:
ArrayIterator<T>
for managed arrays (T[]
)ListIterator<T>
forList<T>
NativeArrayIterator<T>
forNativeArray<T>
(automatically compiled out when Unity 2018.1+ isn't available)
They all have the same API. Here's the basics of using ArrayIterator<T>
:
// Get an array
int[] array = new [] { 30, 10, 20, 40 };
// Get an iterator to the beginning of the array
ArrayIterator<int> begin = array.Begin();
// Get the value of the iterator
int val = begin.GetCurrent();
// Move to the next element
ArrayIterator<int> second = begin.GetNext();
// Get an iterator to one past the end of the array
ArrayIterator<int> end = array.End();
// Reverse [ 10, 20, 40] so the array is [ 30, 40, 20, 10 ]
second.Reverse(end);
// Search for an element satisfying a condition
ArrayIterator<int> it20 = begin.FindIf(end, e => e < 25);
There is much more functionality available. See the source for more.
To read about the making of this library, see the Enumerables Without the Garbage series: