Showing part of an array

Let’s say you have an array which might contain:

colors = [“black”,“white”,“red”,“yellow”,“green”]

And you’d like to see the first three elements with a … attached to
the end if there are more than 3.

“colors[0,2].join(’, ‘) + ’ …’ if colors.count > 3”

Which of course is blank in there are less than 3 elements in the array.

How do I limit the if to only working on the ’ …’ part?

Sorry for the newbie question, but I have no idea what to even look for
in the docs.

Thanks!

Rosina Bignall wrote:

How do I limit the if to only working on the ’ …’ part?

def print_color(colors)
if colors.size > 3
puts colors[0,3].join(’, ‘)+’ …’
else
puts colors.join(’, ')
end
end


Xicheng

Rosina Bignall wrote:

How do I limit the if to only working on the ’ …’ part?

puts “#{colors[0, 2].join(’, ‘)}#{’…’ if colors.length > 3}”

Daniel S. wrote:

Rosina Bignall wrote:

How do I limit the if to only working on the ’ …’ part?

puts “#{colors[0, 2].join(’, ‘)}#{’…’ if colors.length > 3}”

That’s what I thought, but this is actually being passed as an argument
to be evaluated:

@scaffold_columns = [
AjaxScaffold::ScaffoldColumn.new(self, { :name => “colors”,
:eval => “#{breed.colors[0, 2].collect{ |color| color.name}.join(’,
‘)}#{’…’ if breed.colors.length > 3}”,
:sortable => false } )
]

so I am just left with an blank column.

Thanks for your help!
Rosina

I think this example is asking for the ternary op.

 colors = %w( black red white yellow green )
 colors[0,3].join(', ') + (colors.length > 3 ? ' ...' : '')

Dumaiu wrote:

I think this example is asking for the ternary op.

 colors = %w( black red white yellow green )
 colors[0,3].join(', ') + (colors.length > 3 ? ' ...' : '')

Thank you! Thank you! Thank you! Yes, that’s exactly what it needs!

Cheers,
Rosina