Alexandre Calaça
Alexandre Calaça's Blog

Alexandre Calaça's Blog

How to check if an object is present in an array in Ruby?

How to check if an object is present in an array in Ruby?

Alexandre Calaça's photo
Alexandre Calaça
·Jan 4, 2020·

3 min read

Subscribe to my newsletter and never miss my upcoming articles

Play this article

Table of contents

  • Greetings
  • Introduction
  • Approaches
  • First approach - Using the index() method
  • Second approach - Using the any? method
  • Third approach - Using the include? method
  • Conclusion

Greetings

Hey, It's Alexandre Calaça here. Hope you're good.

Introduction

Today, let's work on 3 different approaches to check if an object is present in the array in Ruby. Every approach has their cons and pros, however I totally recommend the third approach.

Let's rock? lol

Approaches

Basically, there are three approaches:

  • First approach - Using the index method
  • Second approach - Using the any? method
  • Third approach - Using the include? method

First approach - Using the index() method

The index() method returns the index of the first object in an array such that the object is, it's based on the number used as a parameter.

Here's the catch, it doesn't return a boolean value. It returns an enumerator.

In the following example, it returns number 4 because it is the index of the specified value, number 9.

irb(main):001:0> array = [1, 31, 3, 7, 9, 99]
irb(main):011:0> array.index(9)
=> 4

nil is returned if no results are found

irb(main):001:0> array = [1, 31, 3, 7, 9, 99]
irb(main):012:0> array.index(87)
=> nil

It returns the array itself if no parameter is given.

irb(main):013:0> array.index()
=> #<Enumerator: [1, 31, 3, 7, 9, 99]:index>

If it's really necessary a boolean value return, then, we need to look for a way to workaround this problem.

IF the return value is different than 0, then, the object is in the array.

irb(main):001:0> array = [1, 31, 3, 7, 9, 99]
irb(main):014:0> array.index(1) != nil
=> true
irb(main):015:0> array.index(2) != nil
=> false

Second approach - Using the any? method

The any? method is very powerful and it deserves a full article about its features. In this article, let's check only on case scenario.

In the following example, the my_array variable has 6 elements. The any? method takes a block and it is looking for the number 3, so, the return is true.

irb(main):001:0> my_array = [1, 31, 3, 7, 9, 99]
irb(main):002:0> my_array.any? {|i| i == 3}
=> true

The return is false in the following example, since the number 4 is not in the my_array variable.

irb(main):001:0> my_array = [1, 31, 3, 7, 9, 99]
irb(main):002:0> my_array.any? {|i| i == 4}
=> false

Third approach - Using the include? method

The include? method returns true if the specified value is in the array and false if not. Equality is tested using ==.

The boolean value true is returned when the object is in the array.

irb(main):001:0> array = [1, 31, 3, 7, 9, 99]
irb(main):007:0> array.include?(3)
=> true

The boolean value false is returned when the object is NOT in the array.

irb(main):001:0> array = [1, 31, 3, 7, 9, 99]
irb(main):008:0> array.include?(4)
=> false

The method member?() is also available, it is an alias for the method include?(), so, you can use which one you want.

irb(main):001:0> array = [1, 31, 3, 7, 9, 99]
irb(main):004:0> array.member?(1)
=> true
irb(main):007:0> array.include?(3)
=> true
irb(main):008:0> array.include?(4)
=> false
irb(main):009:0> array.member?(4)
=> false

Conclusion

How to pick the best option? If the goal is to only check if an object is present in an array, then, use the member? or the include? method.

If you need more features or options, such as the possibility of checking if any of the array items have a specific length, then, use the any? method.

If you're interested in the index of the given parameter, then, use the index method.

That's all for today. Reach me out if you have any questions, guys.

 
Share this