
int[] myArray1 = { 1, 2, 3, 4, 5 };
int[] myArray2 = new[] { 1, 2, 3, 4, 5 };
int[] myArray3 = new int[] { 1, 2, 3, 4, 5 };
int[] myArray4 = [1, 2, 3, 4, 5];
int[] myArray5 = new int[5]; // {0, 0, 0, 0, 0}

// IEnumerable<>

var myArray6 = Enumerable.Range(1, 15).Select(a => a*5);
//               ^ Create Enumerable (1) ^ Create Enumerable (1) ^ Create Enumerable (1) ^ allocate array (5)
//               Array(5)              .map(a => a * 2)          .filter(a => a > 5)
//               ^ allocate array (5)  ^ allocate array (5)      ^ allocate array (5)

// 1    8192 | create range
// 1    8192 | map over
// 1    8192 | filter
// 8192

var myArray7 = myArray6.Select(a => a * 9);

// map -> Select
// filter -> where
// flatMap -> SelectMany
// find -> FirstOrDefault / First
// includes -> Contains
// reduce -> Aggregate


User[] users =
[
    new User(UserRole.User, "John Doe"),
    new User(UserRole.Admin, "Jane Doe"),
    new User(UserRole.User, "Jimmy Doe"),
];

var grouped = users.GroupBy(u => u.Role);

Console.WriteLine("ARR: {0}", string.Join(", ", myArray6));

IEnumerable<User> users2 = [];

for (int i = 0; i < 100; i++) {
    users2 = users2.Append(new User(UserRole.User, "John Doe"));
}

enum UserRole
{
    User,
    Admin,
}
record User(UserRole Role, string Name);
