152. Enumerable Repeat

לפעמים אנחנו מעוניינים ליצור אוסף מסוים של איברים שמורכב בעצם משכפול של איבר מסוים.

הדרך הסטנדרטית לעשות משהו כזה:

1
2
3
4
5
6
7
8
9
10
11
public static IEnumerable<T> Repeat<T>(T item, int times)
{
List<T> repeated = new List<T>();
for (int i = 0; i < times; i++)
{
repeated.Add(item);
}
return repeated;
}

כמובן, בד"כ אנחנו לא נכתוב פונקציה כזאת, בטח לא גנרית, אלא נכניס את זה כקטע קוד נוסף בתוך הקוד שלנו.

בLINQ הוסיפו לנו מתודה שעושה משהו כזה, וכמו כל דבר בLINQ, גם היא Lazy:

1
2
3
4
5
6
7
public static IEnumerable<T> Repeat<T>(T item, int times)
{
for (int i = 0; i < times; i++)
{
yield return item;
}
}

למשל, נניח ואנחנו רוצים ליצור מערך בגודל 1024 שכל האיברים בו מאותחלים במספר 1 (כי במערך של מספרים, דיפולטית כל האיברים מאותחלים להיות 0)

נוכל לעשות זאת כך:

1
2
int[] aLotOfOnes =
Enumerable.Repeat(1, 1024).ToArray();

חג פסח שמח!

שתף