DEV Community

El Bruno for Microsoft Azure

Posted on • Originally published at elbruno.com on

#Rust 🦀 – Working with hashmaps is cool. And a little C# experience 😄

Hi !

During today’s Rust lession in the “First Steps with Rust” (in Spanish), we reviewed the Hashmaps in Rust. We talk about the behavior when we access a non existing item, and it was nice to get a NONE return instead of an error or an exception.

In example this code:

 use std::collections::HashMap; fn main() { let mut pets = HashMap::new(); pets.insert("Ace", "dog"); pets.insert("Goku", "car"); pets.insert("Jim", "squirrel"); println!("{:#?}", pets); let net = "Net"; let net_animal = pets.get(net); println!("{} is a {:?}", net, net_animal); } 
Enter fullscreen mode Exit fullscreen mode

Returns this output.

 warning: `HashMap01` (bin "HashMap01") generated 1 warning Finished dev [unoptimized + debuginfo] target(s) in 0.83s Running `target\debug\HashMap01.exe` { "Ace": "dog", "Goku": "car", "Jim": "squirrel", } Net is a None 
Enter fullscreen mode Exit fullscreen mode

There is no element with the key “Net”, so it returs None.

Is the same in C# ? 🤔

And, hey, what happens with this in C#? I was sure that, if I try to access a non-existing element, the app will trigger an error. So I tested this code

 // create a new dictionary named petsDic Dictionary<string, string> petsDic = new Dictionary<string, string>(); petsDic.Add("Ace", "dog"); petsDic.Add("Goku", "car"); petsDic.Add("Jim", "squirrel"); // print the petsDic items foreach (KeyValuePair<string, string> pet in petsDic) Console.WriteLine(pet.Key + " is a " + pet.Value); // get an element from the dictionary var petD = petsDic["Milly"]; Console.WriteLine("Milly is a " + petD); 
Enter fullscreen mode Exit fullscreen mode

And, as expected, I got an System.Collections.Generic.KeyNotFoundException !

But hey, for this sample I’m using a Dictionary<>. So let’s give this a try using a Hashtable in C#. So let’s try this code.

 using System.Collections; // create a new hashtable named pets Hashtable pets = new Hashtable(); pets.Add("Ace", "dog"); pets.Add("Goku", "car"); pets.Add("Jim", "squirrel"); // print the pets hashtable items foreach (DictionaryEntry pet in pets) Console.WriteLine(pet.Key + " is a " + pet.Value); // get an element from the hashtable var petM = pets["Milly"]; Console.WriteLine("Milly is a " + petM); 
Enter fullscreen mode Exit fullscreen mode

And, this scenario didn’t trigger an Exception 👍.

using HashTables in C#, and accesing a non-exiting element, did not trigger an exception.

During this Rust series, we talk a lot about understanding how each data type works. And as a plus, I’ll add that if you have some previous knowledge, it’s better to check and validate the knowledge ! I was caught in a false assumption in this one !

Happy coding!

Greetings

El Bruno

More posts in my blog ElBruno.com.


Top comments (2)

Collapse
 
pauljlucas profile image
Paul J. Lucas

This is mistagged. #c is the tag for C. You want #csharp.

Collapse
 
elbruno profile image
El Bruno Microsoft Azure

Thanks ! I'll fix it !