Exploring Dart Collection Types: Part 2 — Sets
Tags: flutter, dart, learning, development
Published: 2021-09-05 06:40:18

In the previous [article](https://dev.to/iizmotabar/exploring-dart-collection-types-part-1-lists-3ocj), We discussed Lists in detail. Today we’ll discuss the second type of Dart’s Collection i-e; Sets.

A Set in dart is an unordered collection of unique objects. Since the collection is of unordered objects, we cannot iterate through the elements using Indices like we can in other Collection Types such as Lists.

One use case of choosing Sets over Lists is that suppose we want to have a collection of Unique names of Employees and the order of names does not really matter. Sets could work out better in this scenario than List as Sets cannot have duplicates.

Let’s get our hands dirty and see how Set is declared and what does it has to offer:

A Set can be defined using Set Constructor as well as defining it explicitly as:

```dart

void main() {
  // Defining a set using Constructor
  var thisIsASet = Set();

  // Implicitly declaring a Set of dynamic types
  var setOfNames = {'John', 'Emilia', 'Robb', 'Jack', 'Jorah', 'Stark', 1, 4};

  //Explicitly defining a set of just String values
  Set<String> colors = {'Blue', "Red", "Orange", "Green"};


}

```

We can also convert a List into a set using Set.from() and providing the List as an argument to it as:

```dart

void main()
{

  List listOfNumbers = [1,2,3,4,5,5];

 //converting a List to a set
 Set setOfNumbers = Set.from(listOfNumbers);
 
 //Returns set having no duplicates
 print(setOfNumbers); //returns {1,2,3,4,5}

}
```

Since a Set’s element does not have an order, we cannot access it using Index but we can access it using elementAt() method that is available for sets. The method takes in an integer value as an index and returns the element which is present at that index as:

```dart

void main() {

  List listOfNumbers = [1, 2, 3, 4, 5, 5, 6];

  // converting a list into a Set
  Set setOfNumbers = Set.from(listOfNumbers);

  //Returns set having no duplicates
  print(setOfNumbers); //returns {1,2,3,4,5,6}
  
  
}

```

Dart’s Set offers general Set Operations such as Union, Intersection, difference, Compliment etc. Let’s go through them one by one:

#union():

The union() method in takes in a set as a parameter and unites the elemtents with the Set on which it is called on. Let’s make it less complex as see it in action:

```dart

void main() {
  Set<int> setOfOddNumbers = {1, 3, 5, 7, 9};

  Set<int> setOfEvenNumbers = {2, 4, 6, 8, 10};

  // Taking union of set of odd and even numbers:
  print(
      "${setOfOddNumbers.union(setOfEvenNumbers)}"); //rturns {1, 3, 5, 7, 9, 2, 4, 6, 8, 10}

}
```

#intersection():

The intersection() method, just like the union method takes in a set as a parameter and intersects it with the set on which it is called on. In code, it works as follows:

```dart

void main() {
  Set<int> firstSet = {1, 2, 3, 4, 5, 6};

  Set<int> secondSet = {1, 4, 2, 6, 8, 7};

  // Taking intersection of set of first and second set:
  print("${firstSet.intersection(secondSet)}"); //returns {1,2,4,6} as only these are present in first and the second set

}
```

#difference():

The differnce() method returns back the set having the elements that are in the first Set but not in the second. It works by taking in a set as a parameter and taking difference with the set on which it is called on as follows:

```dart
void main() {
  Set<int> firstSet = {1, 2, 3, 4, 5, 6};

  Set<int> secondSet = {1, 4, 2, 6, 8, 7};

  // Taking the difference of first and second set:
  print("${firstSet.difference(secondSet)}"); //returns {3,5} as only these two are present in first but not in the second set

}

```

*Compliment of a set is just like the difference between the sets. The only difference is the first set is a Universal Set (A set containing elements of all the sets).*

In addition to basic Set Operations, Dart offer plenty of other methods for its Set Collection Type. Let’s go through them one by one and see what they do.


#add():

Like the name suggests, the add method is used to add elements into the set. The method takes in an element as parameter and adds it up into the set on which it is called on as follows:

```dart

void main() {
  Set<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8};

  // Adding elements into the set
  numbers.add(9);
  numbers.add(10);
  // Printing the modified set
  print(numbers); //returns {1,2,3,4,5,6,7,8,9,10}
}

```

#remove():

remove() method on Sets works just like the add method but does the opposite. It removes the elements from the list. The method takes in an element as the parameter that we want to remove from the set and removes it. Let’s see that in code:

```dart

void main() {
  Set<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  // removing elements from the set
  numbers.remove(4);
  numbers.remove(6);
  // Printing the modified set
  print(numbers); //returns {1,2,3,5,7,8,9,10}
}


```

#clear():

Sometimes we want to delete all the elements that are present in the Set. For that purpose, the Set clear() method comes in handy. Just call it on the set you want to clear and it will remove all the elements present in it.

```dart

void main() {
  Set<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  // Deletes all the elements present in the set
  numbers.clear();
  
  print(numbers); //returns {}
}

```

#contains():

The contain() method on Set helps us if we want to check if a certain element is present in the list. It takes in the element we want to check as a parameter and returns true if the element is in the list and false if it is not. Let’s see that in code:


```dart

void main()
{
  Set<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8};

  // Check if an element exists in the list
  print(numbers.contains(2)); //returns true as 2 is present in the set

}


```

These are some of the methods that are more repeatitively used with Sets. If you’re interested in learning more about them, you can check them out at [dart.dev](https://api.dart.dev/stable/2.13.4/dart-core/Set-class.html).

That’s all for now Folks! Thanks for reading this article ❤️ Will soon be posting the next parts. Stay tuned!

Feel free to post any queries or corrections you think are required ✔

Do leave a feedback so I can improve on my content. Thankyou! 😃

If you’re interested, here are some of my other articles on

* [Dart Collection Types: Lists](https://dev.to/iizmotabar/exploring-dart-collection-types-part-1-lists-3ocj)

* [The Beauty of Dart Strings Method](https://dev.to/iizmotabar/the-beauty-of-dart-string-methods-1nje)