
Czasami zachodzi potrzeba utworzenia kolekcji liczb/obiektów na podstawie zdefiniowanego zakresu liczbowego.
Zamiast definiowania tablicy oraz używania pętli:
1
2
3
4
5
6
7
| public static List<YearClass> LoadData()
{
List<YearClass> years = new List<YearClass>();
for (int i = 2000; i < 2015; i++)
years.Add(new YearClass(i));
return years;
}
|
można wykorzystać Enumerable.Range(int, int)
link MSDN
1
2
3
4
| public static List<YearClass> LoadData()
{
return Enumerable.Range(2000, 15).Select(x => new YearClass(x)).ToList<YearClass>();
}
|
Prawda że ładniej? Może nie jest to itertools z Pythona ale robi to co trzeba.
Oczywiście metodę można wykorzystać do tworzenia różnego rodzaju ciągów:
1
2
3
4
5
6
7
8
9
10
11
| // ciąg arytmetyczny
var seq1 = Enumerable.Range(0, 5).Select(x => x * 3 + 2).ToList();
// 2, 5, 8, 11, 14
// kwadraty
var seq2 = Enumerable.Range(1, 6).Select(x => x * x).ToList();
// 1, 4, 9, 16, 25, 36
// potęgi dwójki
var seq3 = Enumerable.Range(0, 10).Select(x => (int)Math.Pow(2, x)).ToList();
// 1, 2, 4, 8, 16, 32, 64, 128, 256, 512
|
również znakowych:
1
2
| var percentStrArray = Enumerable.Range(0, 10).Select(x => (10 * x) + "%" ).ToArray();
// "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%"
|
Eksperymentalne pobieranie wszystkich małych liter ASCII wygląda następująco:
1
2
| var smallASCII = Enumerable.Range((int)'a', (int)'z' - (int)'a' + 1).Select(x => (char)x).ToArray();
// 'a', 'b', 'c', ..., 'y', 'z'
|