Multi-Dictionaries, Nested Dictionaries, Sets

Slides:



Advertisements
Similar presentations
NoSQL Databases NoSQL Concepts SoftUni Team Technical Trainers Software University
Advertisements

Loops Repeating Code Multiple Times SoftUni Team Technical Trainers Software University
Methods, Arrays, Lists, Dictionaries, Strings, Classes and Objects
Multidimensional Arrays, Sets, Dictionaries Processing Matrices, Multidimensional Arrays, Dictionaries, Sets SoftUni Team Technical Trainers Software University.
Test-Driven Development Learn the "Test First" Approach to Coding SoftUni Team Technical Trainers Software University
Java Collections Basics Arrays, Lists, Strings, Sets, Maps Svetlin Nakov Technical Trainer Software University
Graphs and Graph Algorithms Fundamentals, Terminology, Traversal, Algorithms SoftUni Team Technical Trainers Software University
Arrays, Lists, Stacks, Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Sets, Dictionaries SoftUni Team Technical Trainers Software University
Lists and Matrices Lists: Variable-Size Arrays Matrices: Arrays of Arrays (Tables) SoftUni Team Technical Trainers Software University
Functional Programming Data Aggregation and Nested Queries Ivan Yonkov Technical Trainer Software University
Inheritance Class Hierarchies SoftUni Team Technical Trainers Software University
Stacks and Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Generics SoftUni Team Technical Trainers Software University
Graphs and Graph Algorithms
Version Control Systems
Auto Mapping Objects SoftUni Team Database Applications
Functional Programming
Databases basics Course Introduction SoftUni Team Databases basics
Sets, Hash table, Dictionaries
C# Basic Syntax, Visual Studio, Console Input / Output
Data Structures Course Overview SoftUni Team Data Structures
C# Basic Syntax, Visual Studio, Console Input / Output
Introduction to MVC SoftUni Team Introduction to MVC
PHP MVC Frameworks Course Introduction SoftUni Team Technical Trainers
Mocking tools for easier unit testing
Parsing JSON JSON.NET, LINQ-to-JSON
State Management Cookies, Sessions SoftUni Team State Management
EF Code First (Advanced)
PHP MVC Frameworks MVC Fundamentals SoftUni Team Technical Trainers
Database Design and Rules
Processing Sequences of Elements
Parsing XML XDocument and LINQ
Repeating Code Multiple Times
Basic Tree Data Structures
Data Definition and Data Types
Databases advanced Course Introduction SoftUni Team Databases advanced
Arrays, Lists, Stacks, Queues
Balancing Binary Search Trees, Rotations
Debugging and Troubleshooting Code
Entity Framework: Relations
Fast String Manipulation
Array and List Algorithms
Functional Programming
Processing Variable-Length Sequences of Elements
Regular Expressions (RegEx)
Functional Programming and Stream API
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Numeral Types and Type Conversion
Databases Advanced Course Introduction SoftUni Team Databases Advanced
Combining Data Structures
Arrays and Multidimensional Arrays
Data Definition and Data Types
Multidimensional Arrays, Sets, Dictionaries
Extending functionality using Collections
Exporting and Importing Data
Manual Mapping and AutoMapper Library
Language Comparison Java, C#, PHP and JS SoftUni Team
Functional Programming
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Exporting and Importing Data
CSS Transitions and Animations
Iterators and Comparators
Hash Tables, Sets and Dictionaries
Version Control Systems
Text Processing and Regex API
Files, Directories, Exceptions
CSS Transitions and Animations
Iterators and Generators
Multidimensional Arrays
Presentation transcript:

Multi-Dictionaries, Nested Dictionaries, Sets Advanced Dictionaries SoftUni Team Technical Trainers Software University http://softuni.bg

Table of Contents Multi-Dictionaries Nested Dictionaries Sets A Dictionary Holding List of Values Nested Dictionaries A Dictionary Holding Another Dictionary Sets HashSet<T> SortedSet<T>

sli.do #extended-softuni Questions? sli.do #extended-softuni

Dictionaries Holding a List of Values Multi-Dictionaries Dictionaries Holding a List of Values © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Value  List<int> Multi-Dictionaries A dictionary could hold a set of values by given key Example: students may have multiple grades: Peter  [5, 5, 6] Kiril  [6, 6, 3, 4, 6] Dictionary<string, List<int>> grades; Key  String Value  List<int>

Example: Student Grades Each student has a list of grades We can access the student’s grades by name: Value  List<int> var grades = new Dictionary<string, List<int>>(); grades["Peter"] = new List<int>(); grades["Peter"].Add(5); grades["Peter"].Add(6); var kirilGrades = new List<int>() { 6, 6, 3, 4, 6 }; grades["Kiril"] = kirilGrades; Console.WriteLine(string.Join(" ", grades["Kiril"]); // 6 6 3 4 6 Initialize the list Accessing list by key (Peter) Assigning list to key

Problem: Average Student Grades Write a program to read student names + grades Print the grades + average grade for each student as shown below 7 Ivancho 5.20 Mariika 5.50 Ivancho 3.20 Mariika 2.50 Stamat 2.00 Mariika 3.46 Stamat 3.00 Ivancho -> 5.20 3.20 (avg: 4.20) Mariika -> 5.50 2.50 3.46 (avg: 3.82) Stamat -> 2.00 3.00 (avg: 2.50)

Solution: Average Student Grades (1) var grades = new Dictionary<string, List<double>>(); var n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { var tokens = Console.ReadLine().Split(); var name = tokens[0]; var grade = double.Parse(tokens[1]); if (!grades.ContainsKey(name)) grades[name] = new List<double>(); grades[name].Add(grade); } // continued on next slide ... Make sure the list is initialized Add grade into list

Solution: Average Student Grades (2) KeyValuePair<string, List<double> foreach (var pair in grades) { var name = pair.Key; var studentGrades = pair.Value; var average = studentGrades.Average(); Console.Write($"{name} -> "); foreach (var grade in studentGrades) Console.Write($"{grade:f2} "); Console.WriteLine($"(avg: {average:f2})"); } Key: string Value: List<string> Average value of the list

Dictionary Holding Dictionary Inside BG  UK  USA  Sofia  1,211,000 Plovdiv  338,657 London  8,674,000 Manchester  2,550,000 New York City, NY  8,406,000 Washington, DC  658,893 Nested Dictionaries Dictionary Holding Dictionary Inside © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Value: Dictionary <string, int> Nested Dictionaries Dictionaries may hold another Dictionary<K,V> as value Example: population by country and city Value: Dictionary <string, int> BG  UK  USA  Sofia  1,211,000 Plovdiv  338,657 London  8,674,000 Manchester  2,550,000 New York City, NY  8,406,000 Washington, DC  658,893 Key: string

Problem: Cities by Continent and Country Write a program to read continents, countries and their cities, put them in a nested dictionary and print them 9 Europe Bulgaria Sofia Asia China Beijing Asia Japan Tokyo Europe Poland Warsaw Europe Germany Berlin Europe Poland Poznan Europe Bulgaria Plovdiv Africa Nigeria Abuja Asia China Shanghai Europe: Bulgaria -> Sofia, Plovdiv Poland -> Warsaw, Poznan Germany -> Berlin Asia: China -> Beijing, Shanghai Africa: Nigeria -> Abuja

Solution: Cities by Continent and Country (1) var continentsData = new Dictionary<string, Dictionary<string, List<string>>>(); var n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { var tokens = Console.ReadLine().Split(); var continent = tokens[0]; var country = tokens[1]; var city = tokens[2]; // continued on next slide Initialize the dictionary

Solution: Cities by Continent and Country (2) Continent doesn’t exist  create it if (!continentsData.ContainsKey(continent)) continentsData[continent] = new Dictionary<string, List<string>>(); if (!continentsData[continent].ContainsKey(country)) continentsData[continent][country] = new List<string>(); continentsData[continent][country].Add(city); } // continued on next slide... Country doesn’t exist Initialize cities Append a city to the country

Solution: Cities by Continent and Country (3) foreach (var continentCountries in continentsData) { var continentName = continentCountries.Key; var countries = continentCountries.Value; Console.WriteLine($"{continentName}:"); foreach (var countryCities in countries) var countryName = countryCities.Key; var cities = countryCities.Value; Console.WriteLine(" {0} -> {1}", countryName, string.Join(", ", cities)); } Continent name Countries in the continent Country name Cities in the country

Multi and Nested Dictionaries Exercises in Class © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

HashSet<T> and SortedSet<T> Sets HashSet<T> and SortedSet<T>

Sets in C# A set keeps unique elements HashSet<T> Allows add / remove / search elements Very fast performance HashSet<T> Keeps a set of elements in a hash-table Elements are in no particular order Similar to List<T>, but a different implementation SortedSet<T> The elements are ordered incrementally

List<T> vs HashSet<T> Fast "add", slow "search" and "remove" (pass through each element) Duplicates are allowed Insertion order is guaranteed HashSet<T> Fast "add", "search" and "remove" (hash-table behind) Does not allow duplicates Does not guarantee the insertion order

HashSet<T> – Example HashSet<string> set = new HashSet<string>(); set.Add("Pesho"); set.Add("Pesho"); // Not added again set.Add("Gosho"); set.Add("Alice"); Console.WriteLine(string.Join(", ", set)); // Pesho, Gosho, Alice Console.WriteLine(set.Contains("Georgi")); // false Console.WriteLine(set.Contains("Pesho")); // true set.Remove("Pesho"); Console.WriteLine(set.Count); // 2

Problem: Record Unique Names Read a sequence of names and print only the unique ones 8 Ivan Pesho Stamat Alice Peter 7 Lyle Bruce Alice Easton Shawn Peter 6 Roki Roki Roki

Solution: Record Unique Names HashSet stores unique values var names = new HashSet<string>(); var n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { var name = Console.ReadLine(); names.Add(name); } foreach (var name in names) Console.WriteLine(name); Add non-existing names only

SortedSet<T> – Example SortedSet<string> set = new SortedSet<string>(); set.Add("Pesho"); set.Add("Gosho"); set.Add("Maria"); set.Add("Alice"); Console.WriteLine(string.Join(", ", set)); // Alice, Gosho, Maria, Pesho Ordered alphabeticaly

Problem: Group Continents, Countries and Cities Write a program to read continents, countries and city names Keep them in alphabetical order, no duplicates allowed For each continent print all its countries with their towns 9 Europe Bulgaria Sofia Asia China Beijing Europe Poland Warsaw Europe Germany Berlin Europe Poland Poznan Asia China Shanghai Asia: China -> Beijing, Shanghai Europe: Bulgaria -> Sofia Germany -> Berlin Poland -> Poznan, Warsaw

Solution: Cities by Continent and Country (1) var continentsData = new SortedDictionary<string, SortedDictionary<string, SortedSet<string>>>(); var n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { var tokens = Console.ReadLine().Split(); var continent = tokens[0]; var country = tokens[1]; var city = tokens[2]; // continued on next slide Initialize the sorted dictionary

Solution: Cities by Continent and Country (2) Continent doesn’t exist  create it if (!continentsData.ContainsKey(continent)) continentsData[continent] = new SortedDictionary<string, SortedSet<string>>(); if (!continentsData[continent].ContainsKey(country)) continentsData[continent][country] = new SortedSet<string>(); continentsData[continent][country].Add(city); } // continued on next slide... Country doesn’t exist  create it Add the city into country

Solution: Cities by Continent and Country (3) foreach (var continentCountries in continentsData) { var continentName = continentCountries.Key; var countries = continentCountries.Value; Console.WriteLine($"{continentName}:"); foreach (var countryCities in countries) var countryName = countryCities.Key; var cities = countryCities.Value; Console.WriteLine(" {0} -> {1}", countryName, string.Join(", ", cities)); } Continent name Countries in the continent Country name Cities in country

Sets Exercises in Class © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Summary Multi-dictionaries allow keeping a collection as a dictionary value E.g. Dictionary<string, List<int>> Nested dictionaries allow keeping a dictionary as dictionary value E.g. Dictionary<string, Dictionary<string, int>> Sets allow keeping unique values in unspecified order No duplicates, fast add / search / remove SortedDictionary<K,V> / SortedSet<T> keep keys sorted

Advanced Dictionaries https://softuni.bg/courses/programming-fundamentals © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

License This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" license Attribution: this work may contain portions from "Fundamentals of Computer Programming with C#" book by Svetlin Nakov & Co. under CC-BY-SA license © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Trainings @ Software University Software University Foundation – softuni.org Software University – High-Quality Education, Profession and Job for Software Developers softuni.bg Software University @ Facebook facebook.com/SoftwareUniversity Software University Forums – forum.softuni.bg © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.