Identifying

A

Adam Akhtar

If you have an array which contains a mixture of say intergers and
nested arrays, how can you determine whether an element is an array or
not

ie in psedo code

array.each do |x|
if x == Array
do something
end

whats the corect way to write the if statement?

Thanks

Adam.
 
A

Adam Akhtar

ie in psedo code

array.each do |x|
if x == Array
do something
end

whats the corect way to write the if statement?

Thanks

Adam.

in the above array = [1,2,3,[34,56,43,7],6,7] etc
 
P

PullMonkey

[Note: parts of this message were removed to make it a legal post.]

if x.class == Array
or
if x.is_a?(Array)

irb(main):008:0> [1,2,3,[34,56,43,7],6,7].map{|x| x.is_a?(Array)}
=> [false, false, false, true, false, false]


ie in psedo code

array.each do |x|
if x == Array
do something
end

whats the corect way to write the if statement?

Thanks

Adam.

in the above array = [1,2,3,[34,56,43,7],6,7] etc
 
S

Stefano Crocco

Alle Saturday 09 February 2008, Adam Akhtar ha scritto:
If you have an array which contains a mixture of say intergers and
nested arrays, how can you determine whether an element is an array or
not

ie in psedo code

array.each do |x|
if x == Array
do something
end

whats the corect way to write the if statement?

Thanks

Adam.

if x.is_a? Array

Stefano
 
F

Farrel Lifson

If you have an array which contains a mixture of say intergers and
nested arrays, how can you determine whether an element is an array or
not

ie in psedo code

array.each do |x|
if x == Array
do something
end

whats the corect way to write the if statement?

Use a case statement:

array.each do |x|
case x
when Array: do something
when Integer: do something
end
end

Farrel
 
A

Adam Akhtar

Farrel said:
Use a case statement:

array.each do |x|
case x
when Array: do something
when Integer: do something
end
end

is

when Array: do something

a valid statement??

is

if x == Array

also a valid statement??

i was expecting having to use something like x.is_a as Stefano said.
 
T

Tim Hunter

Adam said:
is

when Array: do something

a valid statement??

is

if x == Array

also a valid statement??

i was expecting having to use something like x.is_a as Stefano said.


when Array:

is valid in the context of a case expression.

if x == Array

is also valid, but will only be true if x is in fact Array, that is

x = Array
if x == Array # will be true

For all other things, it will be false.

Here's an online copy of the 1st Edition of _Programming_Ruby_, which
will help answer these questions:
http://www.ruby-doc.org/docs/ProgrammingRuby/
 
C

Christopher Dicely

If you have an array which contains a mixture of say intergers and
nested arrays, how can you determine whether an element is an array or
not

ie in psedo code

array.each do |x|
if x == Array
do something
end

whats the corect way to write the if statement?


Depending on exactly what you want there are two main ways (with
several different ways of expressing the most common):

if x.instance_of? Array ... # tests if x is an Array (strictly)
if x.kind_of? Array ... # test if x is an instance of Array or one of
its descendants
if x.is_a? Array ... # same as kind_of?
if Array === x ... # same as kind_of?, useful to know exists because
it lets you match against classes in case statements
 
C

Christopher Dicely

is

when Array: do something

a valid statement??

Yes. "when" uses the === method of the object given, and Array is a
constant instance of class Class, and Class#===(obj) (inherited from
Module) is equivalent to obj.kind_of?(self)
is

if x == Array

also a valid statement??

x == Array is a *valid* statement, but it doesn't mean the same thing.

case x
when Array: ...
end

is the same as:

if Array === x then ... end

not:

if x == Array then ... end
i was expecting having to use something like x.is_a as Stefano said.

As is oft the case with Ruby, there is more than one way to do it.
 
A

Adam Akhtar

thats brilliant. ive never seen === before. I thought it was a typo at
first. Ill look into those methods now. Thanks
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,570
Members
45,045
Latest member
DRCM

Latest Threads

Top