First of all, I just want to say that you guys rock ;-) Thanks for all the support.
Anyway, let's get down to business. This article is about how to get the number of elements in an array in Ruby.
Introduction
One of the craziest things about Ruby is that there are a bunch of ways to do the same thing, it might scare some newcomers.
Let's check two great ways to check the number of elements in an array.
First way - Using the length
method
The length
method is available in many classes in Ruby, such as the Array and String class. It's used to return the number of elements in an array or the number of characters in a string.
irb(main):002:0> array = [1, 2]
irb(main):003:0> array.length
=> 2
irb(main):004:0> "string".length
=> 6
A NoMethodError
is displayed if the length
method is used in an integer or float type.
irb(main):001:0> 23.length
Traceback (most recent call last):
4: from /usr/local/bin/irb:23:in `<main>'
3: from /usr/local/bin/irb:23:in `load'
2: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
1: from (irb):1
NoMethodError (undefined method `length' for 23:Integer)
irb(main):005:0> 2.3.length
Traceback (most recent call last):
5: from /usr/local/bin/irb:23:in `<main>'
4: from /usr/local/bin/irb:23:in `load'
3: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
2: from (irb):4
1: from (irb):5:in `rescue in irb_binding'
NoMethodError (undefined method `length' for 2.3:Float)
It's possible to have an array with 0 elements. So, it's also possible to return 0.
irb(main):001:0> array = []
irb(main):002:0> array.class
=> Array
irb(main):003:0> array.length
=> 0
The size
method is an alias for the length
method, so, the principles/ideas are all the same. They share the same source code.
Check one example
irb(main):004:0> array
=> []
irb(main):005:0> array.size
=> 0
irb(main):006:0> array = [2, 3, "hi"]
irb(main):007:0> array.size
=> 3
In both scenarios, the result is the same.
irb(main):008:0> array
=> [2, 3, "hi"]
irb(main):009:0> array.size
=> 3
irb(main):010:0> array.length
=> 3
Second way - Using the count
method
It also returns the number of elements, however, it offers new features and possibilities according to the arguments added to it.
First things first, with no arguments, the behavior is the same. Check it out.
irb(main):014:0> array
=> [2, 3, "hi", 4]
irb(main):015:0> array.length
=> 4
irb(main):016:0> array.size
=> 4
irb(main):017:0> array.count
=> 4
In string types, length
and the size
methods have the same result. Just remember that the size
method is just an alias for the length
method.
irb(main):001:0> "string".length
=> 6
irb(main):002:0> "string".size
=> 6
In the String class, the count
method needs an argument, so, the result is not as the same as the other methods. In this case, an ArgumentError
error is displayed.
irb(main):003:0> "string".count
Traceback (most recent call last):
5: from /usr/local/bin/irb:23:in `<main>'
4: from /usr/local/bin/irb:23:in `load'
3: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
2: from (irb):3
1: from (irb):3:in `count'
ArgumentError (wrong number of arguments (given 0, expected 1+))
Since the goal of this article is to focus on how to get the number of elements in an array, we're not going to check the details of the use of the count
method available in the String class. Ok?
Anyway, the count
method allows the use of conditions. Let's check one example:
irb(main):001:0> array = [2, 3, "hi", 3]
irb(main):002:0> array.count(3)
=> 2
In the previous example, the count
method was used to count the occurrences of the number 3. The result was 2.
There are more details to deep dive into the count
method, but this is going to be another article of the blog.
Conclusion
What's the best option? In order to choose, keep in mind 2 things:
- Use the
count
method if there are special needs, such as conditions and/or blocks; - Use the
length
or thesize
method if the goal is only to get the number of elements in an array;
Still don't know what to choose?
Choose the length
or the size
method, because their performance is better than the count
method.