diff --git a/5-arrays-and-lists-slides.html b/5-arrays-and-lists-slides.html new file mode 100644 index 0000000..31066f0 --- /dev/null +++ b/5-arrays-and-lists-slides.html @@ -0,0 +1,226 @@ +5. Arrays and Lists
+

Arrays and Lists

+
+
+

Overview

+
    +
  • Arrays
  • +
  • Multidimensional arrays
  • +
  • Lists
  • +
  • Iterating a list
  • +
  • Foreach
  • +
+
+
+

Arrays

+
    +
  • Arrays are a collection of variables of the same type
  • +
  • To optimize memory usage, arrays allocate neighbouring memory addresses
  • +
  • A single value in this collection is called an element
  • +
  • Arrays can be declared with square brackets following the type of the elements:
    int[] userIds;
    +
    +
  • +
  • Declaring an array does not yet allocate space from memory
  • +
+
+
+

Initializing arrays

+
    +
  • Initialize an array with a length of 3 using the following syntax:
    int[] userIds = new int[3];
    +
    +
  • +
  • Assign a value to an element in an array by specifying the index in square brackets:
    userIds[0] = 104;
    +
    +
  • +
  • Indexing starts from 0, so the above line assigns a value of 104 to the first element of the array
  • +
+
+
+
    +
  • You can also create an array and instantly populate it with values with one statement:
    string[] names = new string[3] { "Johannes", "Rene", "Ville" };
    +
    +
  • +
  • The same works without specifying the length in the brackets:
    double[] balances = new double[] { 1.3, 200.3, 9332.14 };
    +
    +
  • +
+
+
+

Multidimensional Arrays

+
    +
  • C# supports multidimensional arrays
  • +
  • Here's an example of a two-dimensional array.
  • +
  • You can think of it as an array consisting of arrays
    char[,] letters = new char[3, 4]
    +{
    +  {'a', 'b', 'c', 'd'},
    +  {'e', 'f', 'g', 'h'},
    +  {'i', 'j', 'k', 'l'}
    +};
    +
    +Console.WriteLine(letters[1, 3]);       // Outputs "h"
    +
    +
  • +
+
+
+

Lists

+
    +
  • The .NET Framework Library System.Collections.Generic offers another structure to contain multiple variables: the List class
  • +
  • Importing the library:
    using System.Collections.Generic;
    +
    +
  • +
  • Declaration and initialization:
    List<int> userIds = new List<int>();
    +
    +
  • +
  • Value assignment (exactly like arrays):
    userIds[0] = 22;
    +
    +
  • +
+
+
+

Why lists?

+
    +
  • The key benefit of using Lists lies in its built-in functionalities
    +
  • +
  • You can see a list (heh) of available methods in Visual Studio by following the list variable with a dot
  • +
+
+
+

Arrays vs Lists

+
    +
  • The memory allocation of an array is static a.k.a. fixed, but list memory is dynamic
  • +
  • This allows the flexible mutation of lists, meaning you can always add or remove elements, thus changing the length of the list without issues
    List<int> intList = new List<int>() { 1, 9, 4 };
    +intList.Remove(0); // List is now [9, 4]
    +
    +int[] intArray = new int[] { 1, 9, 4 };
    +intArray.Remove(0);
    +// Can't do that, array is static
    +// and doesn't include such method
    +
    +
  • +
+
+
+

When to use arrays or lists?

+
    +
  • Use arrays when you... +
      +
    • ...need high performance
    • +
    • ...can predetermine the number of elements
    • +
    +
  • +
  • Use lists when you... +
      +
    • ...need to add/remove elements dynamically
    • +
    • ...need the list operations
    • +
    +
  • +
+
+
+

Example: Iterating an array with a for loop

+
+
+
string[] names = new string[]
+{
+  "Harry Potter",
+  "Luke Skywalker",
+  "Harley Quinn"
+};
+
+for (int i = 0; i < names.Length; ++i)
+{
+  Console.WriteLine(names[i]);
+}
+
+
+
+

+
+
+
+
+

Iterating a List

+
    +
  • You can iterate the elements of a list with a for loop the same way as an array
  • +
  • Just use List.Count instead of Array.Length
    List<int> numbers = new List<int>() { 1, 5, 3 };
    +int sum = 0;
    +for (int i = 0; i < numbers.Count; ++i)
    +{
    +  sum += numbers[i];
    +}
    +// sum is now 9
    +
    +
  • +
+
+
+

foreach Statement

+
    +
  • There is one more statement to use to iterate arrays and lists: the foreach statement
  • +
  • foreach is useful when you have to execute code for each element of an array or a list, and don't need the corresponding index:
  • +
+
+
+
string[] names = new string[]
+{
+  "Harry Potter",
+  "Luke Skywalker",
+  "Harley Quinn"
+};
+
+foreach (string name in names)
+{
+  Console.WriteLine(name);
+}
+
+
+
+

+
+
+
+
+

Note about foreach

+
    +
  • However, foreach creates a copy of each element in the object so the element cannot be mutated directly:
    +
  • +
  • Performance-wise, using foreach is also more costly because it uses more memory space
  • +
  • If you need to change every element, consider creating a new list instead
  • +
+
+
+

Exercise 1: Expanding the Console Application

+ +
    +
  1. Continue working on the command line application you created in Lecture 4, Exercise 1: The Main Loop . Add a new command add which prompts the user to write a note.
  2. +
  3. After the user has inputted the note, save it to a list, and return back to listening to commands.
  4. +
  5. Add another command list which prints all the saved notes.
  6. +
  7. Add one more command remove which prints all the saved notes with the index of the note, and then prompts the user for a number. After entering the number the note with the corresponding index is deleted from the list.
  8. +
+
    +
  • Note: you can use the int.Parse() method to parse the user input string to an integer
  • +
+
+
+

Assignments

+

Assignments about this topic can be found here

+
+
\ No newline at end of file diff --git a/5-arrays-and-lists.md b/5-arrays-and-lists.md index 957ca00..7e02e61 100644 --- a/5-arrays-and-lists.md +++ b/5-arrays-and-lists.md @@ -1,204 +1,208 @@ -# Arrays and Lists - -![](imgs/5%20Arrays%20and%20Lists_0.png) - +--- +marp: true +paginate: true +math: mathjax +theme: buutti +title: 5. Arrays and Lists --- -# Overview - -Arrays - -Multidimensional Arrays - -Lists - -Iterating a List - -Foreach - -# Arrays - -Arrays are a collection of variables of the same type, which allocate neighboring memory locations - -A single value in this collection is called an __element__ - -Arrays can be __declared __ with square brackets following the type of the elements: - -int[] userIds; - -Declaring an array does not yet allocate space from memory - -# Arrays (continued) - -__Initialize __ an array with a length of 3 using the following syntax: - -int[] userIds = new int[3]; - -__Assign a value__ to an element in an array by specifying the index in square brackets: - -userIds[0] = 104; - -Indexing starts from 0, so the above line assigns a value of 104 to the first element of the array - -You can also create an array containing values with one statement: - -string[] names = new string[3] { "Johannes", "Rene", "Ville" }; - -The same works without specifying the length in the brackets: - -double[] balances = new double[] { 1.3, 200.3, 9332.14 }; - -# Multidimensional Arrays - -C# supports multidimensional arrays: - -char[,] letters = new char[3, 4] - -{ - -{'a', 'b', 'c', 'd'}, - -{'e', 'f', 'g', 'h'}, - -{'i', 'j', 'k', 'l'} - -}; - -Console.WriteLine(letters[1, 3]); // Outputs "h" - -# Lists - -The .NET Framework Class Library offers another way to hold multiple variables: the _List _ object - -Declaration and initialization: - -List userIds = new List(); - -Value assignment: - -userIds[0] = 22; - -# Lists (continued) - -The key benefit of using Lists lies in its built-in functionalities - -![](imgs/5%20Arrays%20and%20Lists_1.png) - -You can see a list of available methods in VSC2019 by following a variable with a dot - -# Arrays vs Lists +# Arrays and Lists -The memory allocation of an array is static/fixed, but list memory is dynamic + + -This allows the flexible mutation of lists, meaning you can always add or remove and hence change change the length of the list without issues +## Overview -![](imgs/5%20Arrays%20and%20Lists_2.png) +* Arrays +* Multidimensional arrays +* Lists +* Iterating a list +* Foreach -# Arrays vs Lists (continued) +## Arrays -When to use arrays and when lists? +* Arrays are a collection of variables of the same type +* To optimize memory usage, arrays allocate neighbouring memory addresses +* A single value in this collection is called an *__element__* +* Arrays can be *__declared__* with square brackets following the type of the elements: + ```csharp + int[] userIds; + ``` +* Declaring an array does not yet allocate space from memory -Use __arrays __ if you need __high performance__ +### Initializing arrays -Use __lists __ if you need support for __list operations__ +* *__Initialize__* an array with a length of 3 using the following syntax: + ```csharp + int[] userIds = new int[3]; + ``` +* *__Assign a value__* to an element in an array by specifying the index in square brackets: + ```csharp + userIds[0] = 104; + ``` +* Indexing starts from 0, so the above line assigns a value of `104` to the ***first*** element of the array -# Iterating an Array With for Loop - Example +--- +* You can also create an array and instantly populate it with values with one statement: + ```csharp + string[] names = new string[3] { "Johannes", "Rene", "Ville" }; + ``` +* The same works without specifying the length in the brackets: + ```csharp + double[] balances = new double[] { 1.3, 200.3, 9332.14 }; + ``` + +## Multidimensional Arrays + +* C# supports multidimensional arrays +* Here's an example of a two-dimensional array. +* You can think of it as an array consisting of arrays + ```csharp + char[,] letters = new char[3, 4] + { + {'a', 'b', 'c', 'd'}, + {'e', 'f', 'g', 'h'}, + {'i', 'j', 'k', 'l'} + }; + + Console.WriteLine(letters[1, 3]); // Outputs "h" + ``` + +## Lists + +* The .NET Framework Library [`System.Collections.Generic`](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic?view=net-9.0) offers another structure to contain multiple variables: the [List](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=net-9.0) class +* Importing the library: + ```csharp + using System.Collections.Generic; + ``` +* Declaration and initialization: + ```csharp + List userIds = new List(); + ``` +* Value assignment (exactly like arrays): + ```csharp + userIds[0] = 22; + ``` + +### Why lists? + +* The key benefit of using Lists lies in its built-in functionalities + ![](imgs/5%20Arrays%20and%20Lists_1.png) +* You can see a list (heh) of available methods in Visual Studio by following the list variable with a dot + +## Arrays vs Lists + +* The memory allocation of an array is ***static*** a.k.a. fixed, but list memory is ***dynamic*** +* This allows the flexible mutation of lists, meaning you can always add or remove elements, thus changing the length of the list without issues + ```csharp + List intList = new List() { 1, 9, 4 }; + intList.Remove(0); // List is now [9, 4] + + int[] intArray = new int[] { 1, 9, 4 }; + intArray.Remove(0); + // Can't do that, array is static + // and doesn't include such method + ``` + +### When to use arrays or lists? + +* Use arrays when you... + * ...need high performance + * ...can predetermine the number of elements +* Use lists when you... + * ...need to add/remove elements dynamically + * ...need the list operations + +## Example: Iterating an array with a for loop + +
+
+ +```csharp string[] names = new string[] - { - -"Harry Potter", - -"Luke Skywalker", - -"Harley Quinn" - + "Harry Potter", + "Luke Skywalker", + "Harley Quinn" }; -for(int i = 0; i < names.Length; ++i) - +for (int i = 0; i < names.Length; ++i) { - -Console.WriteLine(names[i]); - + Console.WriteLine(names[i]); } +``` -![](imgs/5%20Arrays%20and%20Lists_3.png) - -# Iterating a List - -You can iterate the elements of a list with a for loop the same way as an array - -Just use List.Count instead of Array.Length - -List numbers = new List() { 1, 5, 3 }; - -int sum = 0; +
+
-for (int i = 0; i < numbers.Count; ++i) +![](imgs/5%20Arrays%20and%20Lists_3.png) -{ +
+
-sum += numbers[i]; +## Iterating a List -} +* You can iterate the elements of a list with a for loop the same way as an array +* Just use `List.Count` instead of `Array.Length` + ```csharp + List numbers = new List() { 1, 5, 3 }; + int sum = 0; + for (int i = 0; i < numbers.Count; ++i) + { + sum += numbers[i]; + } + // sum is now 9 + ``` -// sum is now 9 +## `foreach` Statement -# foreach Statement +* There is one more statement to use to iterate arrays and lists: the `foreach` statement +* `foreach` is useful when you have to execute code for each element of an array or a list, and don't need the corresponding index: -There is one more statement to use to iterate arrays and lists: the foreach statement - -foreach is useful when you have to execute code for each element of an array or a list: +
+
+```csharp string[] names = new string[] - { - -"Harry Potter", - -"Luke Skywalker", - -"Harley Quinn" - + "Harry Potter", + "Luke Skywalker", + "Harley Quinn" }; foreach (string name in names) - { - -Console.WriteLine(name); - + Console.WriteLine(name); } +``` -![](imgs/5%20Arrays%20and%20Lists_4.png) - -# foreach Statement (continued) - -However, foreach creates a copy of each element in the object so the element cannot be mutated directly: +
+
-![](imgs/5%20Arrays%20and%20Lists_5.png) - -Performance-wise, using foreach is also more costly because it uses more memory space - ---- - -Instead, create a new list +![](imgs/5%20Arrays%20and%20Lists_4.png) -# Exercise 1: Expanding the Console Application +
+
-Continue working on the command line application you created in "The Main Loop" exercise. Add a new command "add" which prompts the user to write a note. +### Note about `foreach` -After the user has inputted the note, it is saved to a list, and the program returns back to listening to commands. +* However, `foreach` creates a copy of each element in the object so the element cannot be mutated directly: + ![](imgs/5%20Arrays%20and%20Lists_5.png) +* Performance-wise, using foreach is also more costly because it uses more memory space +* If you need to change every element, consider creating a new list instead -Add another command "list" which prints all the saved notes. +## Exercise 1: Expanding the Console Application + -Add one more command "remove" which prints all the saved notes with the index of the note, and then prompts the user for a number. After entering the number the corresponding note is deleted from the list. +1) Continue working on the command line application you created in [Lecture 4, Exercise 1: The Main Loop ](4-loops#exercise-1-the-main-loop). Add a new command `add` which prompts the user to write a note. +2) After the user has inputted the note, save it to a list, and return back to listening to commands. +3) Add another command `list` which prints all the saved notes. +4) Add one more command `remove` which prints all the saved notes with the index of the note, and then prompts the user for a number. After entering the number the note with the corresponding index is deleted from the list. -( __Note__ : you can use int.Parse() -method to parse the user input string to an integer) +* *__Note__*: you can use the `int.Parse()` method to parse the user input string to an integer -# Assignments +## Assignments [Assignments about this topic can be found here](https://gitea.buutti.com/education/academy-assignments/src/branch/master/C%23%20Basics/5.%20Arrays%20&%20Lists) diff --git a/imgs/5 Arrays and Lists_2.png b/imgs/5 Arrays and Lists_2.png deleted file mode 100644 index 46e8df9..0000000 Binary files a/imgs/5 Arrays and Lists_2.png and /dev/null differ