Forum: Ruby Is there an "in" operator in ruby ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Adc6f0b0bc40b0ac4fc3f1ca5000cd38?d=identicon&s=25 Dinesh Umanath (udinesh)
on 2006-04-19 17:45
Hi all,

I want to do this manipulation. I have an array say @test=[2,4,6,8].
How can i compare a given number against the values which are present in
this array? ie.

In a for loop i will be Iterating through a sequence of number say 1 to
10, and i want to take each of these number 1 to 10 and check if this
number is present in the given array @test, if it is present then i want
to execute some sequence of steps, How can i do this check in ruby ?

Is there a kind of "in" operator in ruby ?


Thank You
Dinesh
49ab3ce5a4922b4747d1d6f330784629?d=identicon&s=25 Jake McArthur (Guest)
on 2006-04-19 17:55
(Received via mailing list)
ar = [1, 2, 3, 4, 5, 6]
ar.include? 2          => true
A16652fd5d83c0473bd1e39d9a2117a6?d=identicon&s=25 Dirk Meijer (Guest)
on 2006-04-19 17:58
(Received via mailing list)
@test=[2,4,6,8]

(1..10).each do |n|
if @test.include?(n)
  #execute code
end


2006/4/19, Jake McArthur <jake.mcarthur@gmail.com>:
A16652fd5d83c0473bd1e39d9a2117a6?d=identicon&s=25 Dirk Meijer (Guest)
on 2006-04-19 18:01
(Received via mailing list)
silly me, should of course be:

@test=[2,4,6,8]

(1..10).each do |n|
  if @test.include?(n)
    #execute code
  end
end

2006/4/19, Dirk Meijer <hawkman.gelooft@gmail.com>:
81d609425e306219d54d793a0ad98bce?d=identicon&s=25 Matthew Moss (Guest)
on 2006-04-19 18:05
(Received via mailing list)
Why all that when:

@test.each do |n|
   # execute code
end
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (Guest)
on 2006-04-19 18:05
(Received via mailing list)
On Apr 19, 2006, at 17:45, Dinesh Umanath wrote:

> number is present in the given array @test, if it is present then i
> want
> to execute some sequence of steps, How can i do this check in ruby ?
>
> Is there a kind of "in" operator in ruby ?

Yes, Enumerable#include?:

irb(main):001:0> 1.upto(10) { |x| puts x if [2,4,6,8].include?(x) }
2
4
6
8
=> 1

-- fxn
7448223373b57c5ff5683dc7be9edffe?d=identicon&s=25 Brett Rogers (Guest)
on 2006-04-19 18:08
(Received via mailing list)
To expand:

ar = [1, 2, 3, 4, 5, 6]

1.upto 10 do | i |
  do_something if ar.include? i
end
49ab3ce5a4922b4747d1d6f330784629?d=identicon&s=25 Jake McArthur (Guest)
on 2006-04-19 18:17
(Received via mailing list)
If Array was extended with some set theory, things like this would be
possible:

@test.intersect([1..10]).each { |item| puts item }

:)

- Jake McArthur
Ceafba7411666a8fa4cb2c6f6463015f?d=identicon&s=25 Michael Mell (Guest)
on 2006-04-19 18:17
(Received via mailing list)
for i in [2,4,6,8]
   puts i
end
4feed660d3728526797edeb4f0467384?d=identicon&s=25 Bill Kelly (Guest)
on 2006-04-19 18:51
(Received via mailing list)
From: "Jake McArthur" <jake.mcarthur@gmail.com>
>
> If Array was extended with some set theory, things like this would be
> possible:
>
> @test.intersect([1..10]).each { |item| puts item }

>> x = [*1..5]
=> [1, 2, 3, 4, 5]

>> y = [*3..7]
=> [3, 4, 5, 6, 7]

>> x & y
=> [3, 4, 5]

>> x | y
=> [1, 2, 3, 4, 5, 6, 7]

>> x - y
=> [1, 2]

>> y - x
=> [6, 7]


Regards,

Bill
49ab3ce5a4922b4747d1d6f330784629?d=identicon&s=25 Jake McArthur (Guest)
on 2006-04-19 19:04
(Received via mailing list)
There you go, ruining my moment of self-apparent ingenuity. :P

Anyway....

(@test & [*1..10]).each { |item| puts item }

- Jake
Cff9eed5d8099e4c2d34eae663aae87e?d=identicon&s=25 Jacob Fugal (Guest)
on 2006-04-19 19:07
(Received via mailing list)
On 4/19/06, Dirk Meijer <hawkman.gelooft@gmail.com> wrote:
> @test=[2,4,6,8]
>
> (1..10).each do |n|
>   if @test.include?(n)
>     #execute code
>   end
> end

On 4/19/06, Matthew Moss <matthew.moss.coder@gmail.com> wrote:
> Why all that when:
>
> @test.each do |n|
>    # execute code
> end

Ah, but what if @test includes elements not in the original loop? Eg:

  @test=[2,4,6,8,13]

  (1..10).each do |n|
    if @test.include?(n)
      #execute code
    end
  end
  # => executed for 2, 4, 6, 8

  @test.each do |n|
     # execute code
  end
  # => executed for 2, 4, 6, 8, 13

But, in agreeance with other posters in the thread, I'd actually use
some set arithmetic:

  ([*1..10] & @test).each do |n|
    # execute code
  end

Of course, this assumes that the elements of the outer loop are known
in advance, as opposed to being generated in a while loop, a
non-expanded large range, etc.

Jacob Fugal
C1bcb559f87f356698cfad9f6d630235?d=identicon&s=25 Hal Fulton (Guest)
on 2006-04-19 19:54
(Received via mailing list)
Dinesh Umanath wrote:
>
> Is there a kind of "in" operator in ruby ?

It's backwards from the way you want it.

   array.include?(element)

I invite you to go to rcrchive.org and view RCR 241
and vote for it.  ;)


Cheers,
Hal
This topic is locked and can not be replied to.