Cool způsob jak naplnit pole hodnotou v .NET Core

Dokážete spočítat, kolikrát jste napsali něco jako:

var prime = new bool[1000];
for ( int i = 0; i < isPrime.Length; i++ )
{
prime[i] = true;
}

view raw
ForArrayFill.cs
hosted with ❤ by GitHub

Nebo, pokud milujete LINQ, (a nevadí vám mírně horší výkonnost)?

var prime = Enumerable.Repeat(true, 1000).ToArray();

Pokud jste odpověděli “nekonečněkrát” či více, vyzkoušejte nový způsob k dispozici v .NET Core 2.0 a novějších:

var data = new bool[1000];
Array.Fill(data, true);

view raw
CoreArrayFill.cs
hosted with ❤ by GitHub

Array.Fill přináší to nejlepší z obou světů – je stručnější než ručně psaný for cyklus zatímco je rychlejší než Enumerable.Repeat.

A protože je .NET Core open source můžeme se podívat přímo pod kapotu na implementaci metody Array.Fill a všimnout si, že jde vlastně pouze o zkratku pro celý for cyklus:

public static void Fill<T>(T[] array, T value)
{
if (array == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
}
for (int i = 0; i < array.Length; i++)
{
array[i] = value;
}
}

Stojí také za zmínku, že Array.Fill má další overload který dovoluje specifikovat rozsah indexů, které mají být vyplněny:

public static void Fill<T> (T[] array, T value, int startIndex, int count);

view raw
ArrayFillOverride.cs
hosted with ❤ by GitHub

Buy me a coffeeBuy me a coffee

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.