Download presentation
Presentation is loading. Please wait.
1
INF230 Basics in C# Programming
AUBG, COS dept Lecture 32 Title: Arrays (part 2) Reference: Doyle, chap 8
2
Lecture Contents: Two-dimensional arrays including rectangular types
Two-dimensional arrays including jagged types Multidimensional arrays The ArrayList class to create dynamic lists
3
From Problem Analysis to Program Design
Chapter 8 Advanced Collections C# Programming: From Problem Analysis to Program Design 4th Edition
4
Lecture Contents: Iteration based on data structures – the FOR…EACH type loops Using LINQ with Arrays
5
Using Loops to access Arrays
Given an array: int[] numbers = new int[] {5, 12, 5, 7, 12, 24, 244}; Write a while … loop to output all array elements
6
Using Loops to access Arrays
Given an array: int[] numbers = new int[] {5, 12, 5, 7, 12, 24, 244}; Write a do … while loop to output all array elements
7
Using Loops to access Arrays
Given an array: int[] numbers = new int[] {5, 12, 5, 7, 12, 24, 244}; Write a for loop to output all array elements
8
Using Loops to access Arrays
int cnt = 0; while (cnt < numbers.Length) { Console.Write(" " + numbers[cnt]); cnt += 1; } Console.WriteLine("\n"); //=========================================== cnt = 0; do Console.Write(" " + numbers[cnt]); cnt += 1; } while (cnt < numbers.Length); for (cnt=0; cnt < numbers.Length; cnt++)Console.Write(" " + numbers[cnt]);
9
Using Loops to access Arrays
Given an array: int[] numbers = new int[] {5, 12, 5, 7, 12, 24, 244}; Write a for each loop to output all array elements
10
Using Loops to access Arrays
Given an array: int[] numbers = new int[] {5, 12, 5, 7, 12, 24, 244}; foreach (int Val in numbers) Console.Write(" " + Val); // cnt is called a counter variable. // Val is called a looping variable or iteration variable.
11
For Each Loops can be replaced with
for (int i=1; i<ages.Length; i++) { if(ages[i] > max) max = ages[i]; } can be replaced with foreach (int age in ages) if(age > max) max = age;
12
For Each Loops (continued)
In the for… loop, the counter variable i can have any name. In the foreach loop, the looping variable age can have any name. The primary difference between the two types of loops is that in a foreach loop no changes can be made in the values of elements of the array.
13
7.2 Using LINQ with Arrays LINQ Queries
14
What is LINQ? LINQ stands for Language INtegrated Query
A query is a request for information LINQ provides a standardized way to retrieve information from data sources as arrays, text files, XML documents and data bases
15
LINQ Query A LINQ query for an array is declarative code that describes what you want to retrieve from an array. A LINQ query is a variable – instance/object of a class (also data container) that has contents – sequence of data items extracted and filtered from a source
16
LINQ Query Code of the form range variable
var queryName = from var in arrayName source data where [condition on var] select var; declares the variable queryName as a query and assigns to it a sequence of the values from arrayName that satisfy the stated condition. query operators
17
LINQ Query (continued)
Phrases “from var in arrayName” “where [condition on var]” “select var” are called query clauses. Keywords from, where, select are called query operators. var is called a range variable. arrayName is called a source data.
18
LINQ Query (continued)
var queryName = from var in arrayName where [condition on var] select var; The entire expression to the right of the equal sign = is called a query expression.
19
LINQ Query (continued)
Most query expressions begin with from clause and end with select clause. Each from clause identifies the data source and a range variable. A where clause is added to filter or exclude data from the result.
20
LINQ Query (continued)
The data flow explained (subject Input LINQ Output of further query processing) Data filtered Source sequence of values
21
LINQ Query (continued)
Example // test LINQ int[] nums = new int[] {5, 12, 5, 7, 12}; var numQuery = from num in nums select num; num – range variable nums – data source /array/ from, select – query operators from num in nums – query clause select num – query clause whole text to the right of equal sign – query expression
22
LINQ Query (continued)
Example // test LINQ int[] nums = new int[] {5, 12, 5, 7, 12}; var numQuery = from num in nums select num; How to view the output generated by numQuery? See next slide
23
LINQ Query (continued)
Example // test LINQ int[] nums = new int[] {5, 12, 5, 7, 12}; var numQuery = from num in nums select num; How to view the output generated by numQuery? foreach (int val in numQuery) Console.WriteLine(val);
24
LINQ Query (continued)
Output saved in non text format as contents of numQuery. The values in the sequence can be converted to an array /method toArray()/, displayed in a list box, or written to a text file. var numQuery = … int[] numArray = new int[10]; numArray = numQuery.ToArray(); foreach (int val in numArray) Console.WriteLine(val);
25
LINQ Query (continued)
Output saved in non text format as contents of numQuery. Instead of fixing the array size in advance [10] as on the previous slide, we can count the actual number of array elements using extra loop. var numQuery = from num in nums select num; int broi = 0; foreach (int var in numQuery) {broi++;} int[] arr = new int[broi]; arr = numQuery.ToArray();
26
LINQ Query (continued)
Other useful methods: numQuery.Count() numQuery.Average() numQuery.Sum()
27
LINQ Query (continued)
The example was so simple: primitive 1 to 1 copy source to output The real power of LINQ happens when filtering the input gets involved. The where contextual keyword operator
28
LINQ Query (continued)
int[] nums = new int[] {5, 12, 5, 7, 12}; var numQuery = from num in nums select num; // to be updated as shown below where num < 10
29
LINQ Query (continued)
int[] nums = new int[] {5, 12, 5, 7, 12}; var numQuery = from num in nums select num; // to be updated as shown below where num > 10 && num < 15
30
LINQ Query (continued)
// test LINQ The where operators are said to filter data. The select operators are said to project data.
31
LINQ Query (continued)
The variable in the Select clause can be replaced by an expression involving the variable var numQuery = from num in nums where num < 10 select num + 5 * num; Remark: Missing Select clause produces the same effect as the clause Select num.
32
Function Procedures in Queries
Methods are commonly used in Where and Select clauses var presQuery = from pres in presidents where FirstName(pres) = txtFirstName.Text select IncludeTitle(pres); foreach (pres in presQuery) lstPres.Items.Add(pres);
33
Function Procedures in Queries
Methods are commonly used in Where and Select clauses var presQuery = from pres in presidents where FirstName(pres) = txtFirstName.Text select IncludeTitle(pres); OR: lstPres.DataSource = presQuery.ToList; //???
34
Continuation of Program
String IncludeTitle(String pres) { return "President " + pres; }
35
Order By Operator Sorts string values into alphabetical order (either ascending or descending) Sorts numbers into numeric order (either ascending or descending) int[] nums = new int[] { 5, 12, 5, 7, 12 }; var numQuery = from num in nums orderby num ascending select num;
36
Exercises Write a program that uses a LINQ query to calculate the sum of the numbers in the array declared below: int[] pp = new int[10] { 2, 5, -5, 8, -8, 30, 50, , -80};
37
Exercises Write a program that uses a LINQ query to calculate the average of the numbers in the array declared below: int[] pp = new int[10] { 2, 5, -5, 8, -8, 30, 50, , -80};
38
Thank You For Your Attention!
39
Two-Dimensional Arrays
Two-dimensional and other multidimensional arrays follow same guidelines as one-dimensional Referenced much like you reference a matrix Two kinds of two-dimensional arrays Rectangular Visualized as a table divided into rows and columns Jagged or ragged Visualized as a table whose rows are with variable number of elements C# Programming: From Problem Analysis to Program Design
40
Two-Dimensional Arrays (continued)
int [ , ] calories = { {900, 750, 1020}, {300, 1000, 2700}, {500, 700, 2100}, {400, 900, 1780}, {600, 1200, 1100}, {575, 1150, 1900}, {600, 1020, 1700} }; Notice how each row is grouped using curly braces. A comma is used to separate rows Values are stored side by side in contiguous memory locations using a row major format C# Programming: From Problem Analysis to Program Design
41
Two-Dimensional Representation
Figure 8-1 Two-dimensional structure C# Programming: From Problem Analysis to Program Design
42
Two-Dimensional Arrays (continued)
Declaration format type [ , ] identifier = new type [integral value, integral value]; Two integral values are required for a two-dimensional array Number of rows listed first Data values placed in array must be of the same base type Example (create a 7x3 matrix) int [ , ] calories = new int[7, 3]; C# Programming: From Problem Analysis to Program Design
43
Two-Dimensional Arrays (continued)
calories references address of calories[0,0] Figure 8-2 Two-dimensional calories array C# Programming: From Problem Analysis to Program Design
44
Two-Dimensional Arrays (continued)
Length property gets total number of elements in all dimensions Console.WriteLine(calories.Length); // Returns 21 GetLength( ) – returns the number of rows or columns GetLength(0) returns number of rows GetLength(1) returns number of columns Console.WriteLine(calories.GetLength(1)); //Display 3 (columns) Console.WriteLine(calories.GetLength(0)); //Display 7 (rows) Console.WriteLine(calories.Rank); // returns 2 (dimensions) C# Programming: From Problem Analysis to Program Design
45
Two-Dimensional Arrays (continued)
int [ , ] calories = new int[7, 3]; Console.WriteLine(calories.GetUpperBound(0)); // Returns 6 (row index) foreach (int cal in calories) // Displays all values Console.Write(cal + " "); for (int r = 0; r < calories.GetLength(0); r++) for (int c = 0; c < calories.GetLength(1); c++) calories[r, c] = 0; // Initializes all cells C# Programming: From Problem Analysis to Program Design
46
Two-Dimensional Arrays (continued)
Example illustrate: Passing 2-D array as a parameter to a method Method returning 1-D array C# Programming: From Problem Analysis to Program Design
47
Two-Dimensional Arrays (continued Average by day - size 7)
public static double[ ] CalculateAverageByDay (int[ , ] calories) { int sum = 0; double[ ] dailyAverage = new double[7]; for (int r = 0; r < calories.GetLength(0); r++) for (int c = 0; c < calories.GetLength(1); c++) sum += calories[r, c]; dailyAverage[r] = (double)sum / calories.GetLength(1); sum = 0; } return dailyAverage; Method returns array of averages…row averages C# Programming: From Problem Analysis to Program Design
48
Two-Dimensional Arrays (continued Average by meal - size 3)
public static double[ ] CalculateAverageByMeal(int[ , ] calories) { int sum = 0; double[ ] mealAverage = new double[3]; for (int c = 0; c < calories.GetLength(1); c++) for (int r = 0; r < calories.GetLength(0); r++) sum += calories[r, c]; mealAverage[c] = (double)sum / calories.GetLength(0); sum = 0; } return mealAverage; Method returns array of averages…col averages C# Programming: From Problem Analysis to Program Design
49
Two-Dimensional Arrays (continued average Calories per Meal – void or int as return value)
public static void DisplayAverageCaloriesPerMeal (int[ , ] calories) { double sum = 0; for (int da = 0; da < calories.GetLength(0); da++) for (int ml = 0; ml < calories.GetLength(1); ml++) sum += calories[da, ml]; Console.WriteLine("\nCaloric Average Per Meal: {0:N0}", sum / calories.Length); } da and ml used as row/col identifiers →more representative of the data C# Programming: From Problem Analysis to Program Design
50
Two-Dimensional Arrays (continued average Calories per Meal – void or int as return value)
public static int DisplayAverageCaloriesPerMeal (int[ , ] calories) { double sum = 0; for (int da = 0; da < calories.GetLength(0); da++) for (int ml = 0; ml < calories.GetLength(1); ml++) sum += calories[da, ml]; return sum / calories.Length; } da and ml used as row/col identifiers →more representative of the data C# Programming: From Problem Analysis to Program Design
51
Two-Dimensional Arrays (continued)
Figure 8-3 Output from WeeklyCalorieCounter C# Programming: From Problem Analysis to Program Design
52
Two-Dimensional Arrays (continued)
To align numbers for output, format specifier used Console.WriteLine("{0,-10}: {1,6}", mealTime[c ], mealAverage[c ].ToString("N0")); Comma separates placeholder index from width specifier First argument ({0,-10}) indicates that the first argument should be displayed in a width of 10 Negative value in front of the 10 indicates the value should be left justified Second argument ({1,6}) indicates the numbers are right justified in a width of 6 character positions C# Programming: From Problem Analysis to Program Design
53
Jagged Arrays Rectangular arrays always have a rectangular shape, like a table; jagged arrays do not Also called ‘arrays of arrays’ Example int[ ] [ ] anArray = new int[4] [ ]; anArray [0] = new int[ ] {100, 200}; anArray [1] = new int[ ] {11, 22, 37}; anArray [2] = new int[ ] {16, 72, 83, 99, 106}; anArray [3] = new int[ ] {1, 2, 3, 4}; C# Programming: From Problem Analysis to Program Design
54
Multidimensional Arrays
Limited only by your imagination as far as the number of dimensions Format for creating three-dimensional array type [ , , ] identifier = new type [integral value, integral value, integral value]; Example (rectangular) int [ , , ] calories = new int [4 ,7 ,3]; (4 week; 7 days; 3 meals) Allocates storage for 84 elements C# Programming: From Problem Analysis to Program Design
55
Multidimensional Arrays (continued)
Figure 8-4 Three-dimensional array Upper bounds on the indexes are 3, 6, 2 C# Programming: From Problem Analysis to Program Design
56
Multidimensional Arrays (continued)
int [ , , ] calories = new int [4, 7, 4]; // Loop to place the row total in the last column, indexed by 3 for (int wk = 0; wk < calories.GetLength(0); wk++) { for (int da = 0; da < calories.GetLength(1); da++) for (int ml = 0; ml < calories.GetLength(2) - 1; ml++) calories[wk, da, 3] += calories[wk, da, ml]; } C# Programming: From Problem Analysis to Program Design
57
Multidimensional Arrays (continued)
Index from the calories array for the day number used as index for the string day name array C# Programming: From Problem Analysis to Program Design
58
ArrayList Class Limitations of traditional array
Cannot change the size or length of an array after it is created ArrayList class facilitates creating listlike structure, AND it can dynamically increase or decrease in length Similar to vector class found in other languages Includes large number of predefined methods using System.Collections; C# Programming: From Problem Analysis to Program Design
59
ArrayList Class (continued)
Table 8-1 ArrayList members C# Programming: From Problem Analysis to Program Design
60
ArrayList Class (continued)
Table 8-1 ArrayList members (continued) C# Programming: From Problem Analysis to Program Design
61
ArrayList Class (continued)
Table 8-1 ArrayList members (continued) C# Programming: From Problem Analysis to Program Design
62
ArrayList Class (continued)
Any predefined or user-defined type can be used as an ArrayList object C# also includes a List<> class List<> class requires that objects be the same type when you place them in the structure ArrayList allows you to mix types C# Programming: From Problem Analysis to Program Design
63
ArrayList Class (continued)
ArrayList anArray = new ArrayList( ); // Instantiates ArrayList anArray.Add("Today is the first day of the rest of your life!"); anArray.Add("Live it to the fullest!"); anArray.Add("ok"); anArray.Add("You may not get a second chance."); anArray.RemoveAt(2); // Removes the third physical one for (int i = 0; i < ar.Count; i++) //Displays elements Console.WriteLine(ar[i] ); C# Programming: From Problem Analysis to Program Design
64
ArrayList Class (continued)
Figure 8-6 Sample run from the ArrayList example C# Programming: From Problem Analysis to Program Design
65
ArrayList Class (continued)
using System; using System.Collections; class SBArrayList { static void Main(string[] args) ArrayList ar = new ArrayList(); ar.Add("Sofia"); ar.Add("Varna"); ar.Add("Bourgas"); for (int i = ar.Count-1; i>=0; i--) Console.Write(ar[i] + " "); ar.Remove("Varna"); Console.WriteLine(); } C# Programming: From Problem Analysis to Program Design
66
TempAgency Application Example
Figure 8-8 Problem specification for Manatee example C# Programming: From Problem Analysis to Program Design
67
TempAgency Application Example (continued)
Table 8-3 Instance field members for the TempAgency class C# Programming: From Problem Analysis to Program Design
68
TempAgency Application Example (continued)
Figure 8-9 Prototype C# Programming: From Problem Analysis to Program Design
69
TempAgency Application Example (continued)
Figure Class diagrams C# Programming: From Problem Analysis to Program Design
70
TempAgency Application Example (continued)
Figure TempAgency class methods behavior C# Programming: From Problem Analysis to Program Design
71
TempAgency Application Example (continued)
Figure TempAgency application output Review TempAgency Example C# Programming: From Problem Analysis to Program Design
72
Practical Demo Source Code Fragments
73
Practical Tasks // two-dimensional arrays - rect or square table - matrix Console.WriteLine("\n\n2D arrays - matrix"); int[,] matrix1 = new int[3, 5]; for (i = 0; i < 3; i++) for (j = 0; j < 5; j++) matrix1[i, j] = i * 5 + j * 10; { Console.Write(" " + matrix1[i, j]); Console.WriteLine(); }
74
Practical Tasks // two-dimensional arrays - rect or square table - matrix Console.WriteLine(); for (i = 0; i < matrix1.GetLength(0); i++) { for (j = 0; j < matrix1.GetLength(1); j++) Console.Write(" " + matrix1[i, j]); } // iteration based on data structures - foreach Console.WriteLine("\n2D array and iteration based on data structures"); foreach (int idd in matrix1) Console.Write(" " + idd);
75
Practical Tasks // two-dimensional arrays - rect or square table - matrix // two-dimensional arrays - list of initializers Console.WriteLine("\n2D array and list of initializers"); int[,] matrix2 = { { 51, 52, 53, 54, 55 }, { 61, 62, 63, 64, 65 }, { 71, 72, 73, 74, 75 } }; for (i = 0; i < matrix2.GetLength(0); i++) { for (j = 0; j < matrix2.GetLength(1); j++) Console.Write(" " + matrix2[i, j]); Console.WriteLine(); }
76
Practical Tasks The difference in declaring
2D rectangular array /matrix/ and 2D jagged /ragged/ array // two-dimensional arrays - rect or square table - matrix // two-dimensional arrays - list of initializers int[,] matrix2 = { { 51, 52, 53, 54, 55 }, { 61, 62, 63, 64, 65 }, { 71, 72, 73, 74, 75 } }; // two-dimensional arrays - special case - jagged array no 1 int[][] matrix3 = new int[3][]; matrix3[0] = new int[] { 0, 2, 4, 6, 8, 10 }; matrix3[1] = new int[] { 1, 3, 5, 7 }; matrix3[2] = new int[] { 11, 22 };
77
Practical Tasks // two-dimensional arrays - special case - jagged array no 1 Console.WriteLine("\n2D array - special case - jagged array"); int[][] matrix3 = new int[3][]; matrix3[0] = new int[] { 0, 2, 4, 6, 8, 10 }; matrix3[1] = new int[] { 1, 3, 5, 7 }; matrix3[2] = new int[] { 11, 22 }; // display jagged arraay for (i = 0; i < matrix3.Length; i++) { Console.WriteLine(); for (j = 0; j < matrix3[i].Length; j++) Console.Write(" " + matrix3[i][j]); }
78
Practical Tasks // two-dimensional arrays - special case - jagged array no 2 int[][] matrix4; matrix4 = new int[3][]; matrix4[0] = new int[10]; matrix4[1] = new int[6]; matrix4[2] = new int[8]; for (i = 0; i < matrix4.Length; i++) { Console.WriteLine(); for (j = 0; j < matrix4[i].Length; j++) Console.Write(" " + matrix4[i][j]); }
79
Practical Tasks // associative array - special case - hashtable
Console.WriteLine("\nAssociative array - hashtable - key and value"); Hashtable ht = new Hashtable(); ht.Add("Sofia", "BG"); ht.Add("Bern", "CH"); System.Windows.Forms.MessageBox.Show((string)ht["Sofia"]); Console.WriteLine(ht["Sofia"]); Console.WriteLine(); Hashtable htt = new Hashtable(); htt.Add(10, "BG"); htt.Add(210, "DE"); System.Windows.Forms.MessageBox.Show((string)htt[210]); Console.WriteLine(htt[210]);
80
Thank You For Your Attention!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.