Welcome to our new lesson on Sets in Dart. Today, we will become acquainted with Sets, Dart's unique data structure. We will explore the concept of a Set, its creation, and the various techniques to manipulate it. Sets are as ubiquitous in programming as they are in day-to-day life. Consider a collection of unique stamps: each stamp is distinct, and their order in the collection doesn’t change their value or uniqueness - that’s an excellent analogy for a Set!
Let's explore how we can implement this concept in Dart. Are you ready to embark on this exciting journey?
A Set in Dart is akin to a List, but it is not ordered and contains unique items. Picture writing a shopping list of ingredients. The order of the ingredients to buy doesn't matter, and there's no duplication. This is what a Set in Dart resembles!
Take a look at how to declare a Set in Dart:
Dart1Set<String> ingredients = {}; // A Set of strings 2// or 3var quantities = <int>{}; // A Set of integers
In Dart, you can declare a Set directly with Set<DataType>
, or use var
coupled with <DataType>
.
Just as you can create a shopping list with start-up items, you can declare a Set and initialize it simultaneously. Dart allows Sets of different data types like String
, int
, and double
. Here's how to accomplish that:
Dart1// A Set of strings initialized with four names 2Set<String> names = {'John', 'James', 'Marie', 'Anna'}; 3 4// A Set of integers initialized with four numbers 5var numbers = <int>{1, 2, 3, 4}; 6 7print(names); // Prints: {John, James, Marie, Anna} 8print(numbers); // Prints: {1, 2, 3, 4}
Now that we can create a Set, it's important to remember that, since Sets are unordered, you cannot index into them like you would with a List. This reinforces the concept of Sets being a collection of unique items without a specific order. Nevertheless, Dart offers various methods such as .add()
, .addAll()
, .remove()
, .clear()
, and .contains()
, which make manipulating Sets quite straightforward despite their unordered nature. Let’s delve into how these methods are applied:
Dart1Set<String> names = {'John', 'James'}; 2 3names.add('Marie'); // adds Marie to the set 4names.addAll({'Anna', 'Oliver'}); // adds Anna and Oliver to the set 5names.remove('John'); // removes John from the set 6print(names.contains('James')); // checks if James is in the set, prints: true 7names.clear(); // clears the set 8 9print(names); // prints: {}
Sets in Dart inherently store only unique elements, effectively preventing duplicates. This characteristic is akin to ensuring no two identical books are placed on your bookshelf. To demonstrate, consider:
Dart1Set<int> numbers = {1, 2, 2, 3, 3, 3}; 2 3print(numbers); // Prints: {1, 2, 3} 4print(numbers.length); // Prints: 3
The example above highlights two key points: firstly, the Set retains only unique items—despite multiple attempts to add duplicates, it stores each number just once. Secondly, by utilizing the .length
method, we quickly ascertain the total count of unique elements present, which in this case is 3. This succinctly illustrates Sets' capability to manage unique data sets efficiently, a principle and tool invaluable for numerous practical applications.
Now, let's examine a practical scenario where sets can showcase their usefulness. Suppose you have a List
of values and you need to eliminate the duplicate values from this List
. Using a Set for this task simplifies the process:
Dart1var list = [1, 2, 2, 3, 3, 3]; 2 3var ourSet = list.toSet(); // convert List to Set, removing duplicates 4 5list = ourSet.toList(); // convert Set back to List 6 7print(list); // Prints: [1, 2, 3]
As we conclude this session on Sets in Dart, we know the concept, creation, and manipulation techniques of a Set, have observed the non-duplication property of Sets, and uncovered practical uses for Sets. Next, we will dive into the hands-on practice, where you'll apply these concepts. See you in the exercises!