Special variable within iterators to hold results?

I have this:

FILTER_COLUMNS = Array.new
DISPLAYABLE_COLUMNS.each do |field_array|
FILTER_COLUMNS << [ field_array[1], field_array[0] ]
end

Is there any way to write this so that it could look something like:

FILTER_COLUMNS = DISPLAYABLE_COLUMNS.each do |field_array|
??? << [ field_array[1], field_array[0] ]
end

so that I don’t have to bother initializing FILTER_COLUMNS - is there
some special variable that holds the intermediate result of the iterator
body?

Or perhaps an appropriate call to collect?

Thanks,
Wes

On 2006.10.03 01:45, Wes G. wrote:

??? << [ field_array[1], field_array[0] ]
end

Take a look at Enumerable, specifically #inject.

On Tue, Oct 03, 2006 at 01:45:19AM +0900, Wes G. wrote:

??? << [ field_array[1], field_array[0] ]
end

so that I don’t have to bother initializing FILTER_COLUMNS - is there
some special variable that holds the intermediate result of the iterator
body?

Or perhaps an appropriate call to collect?

That would work:
FILTER_COLUMNS = DISPLAYABLE_COLUMNS.collect { |field_array|
[field_array[1],
field_array[0] }

Note you can also do something like:

filter_cols = disp_cols.map { |a, b, *_| [b, a] }

( map and collect are aliases of each other. )

On 10/2/06, Rick DeNatale [email protected] wrote:

FILTER_COLUMNS = DISPLAYABLE_COLUMNS.each do |field_array|
??? << [ field_array[1], field_array[0] ]
end

so that I don’t have to bother initializing FILTER_COLUMNS - is there
some special variable that holds the intermediate result of the iterator
body?

filter_columns = displayable_columns.inject([] {|

darn that itchy trigger finger.

displayable_columns.inject([]) {|result, field_array| result <<
[field_array[1], field_array[0]]}

or assuming that field_array contains two element arrays:

displayable_columns.inject([]) {|result, field_array| result <<
[field_array[1], field_array[0]]}


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

On 10/2/06, Rick DeNatale [email protected] wrote:

On 10/2/06, Rick DeNatale [email protected] wrote:

Okay, one last try

or assuming that field_array contains two element arrays:

displayable_columns.inject([]) {|result, field_array| result <<
field_array.reverse}


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

IPMS/USA Region 12 Coordinator
http://ipmsr12.denhaven2.com/

Visit the Project Mercury Wiki Site
http://www.mercuryspacecraft.com/

Firstly, you shouldn’t capitalize your variables like that. Ruby will
treat any variable with a capital first letter as a constant - it will
behave differently.

A better implementation would be:

filter_columns = displayable_columns.map {|field_array|
[field_array[1], field_array[0]]

or

filter_columns = displayable_columns.map {|field_array|
field_array[0,2].reverse]

On 10/2/06, Wes G. [email protected] wrote:

??? << [ field_array[1], field_array[0] ]
end

so that I don’t have to bother initializing FILTER_COLUMNS - is there
some special variable that holds the intermediate result of the iterator
body?

filter_columns = displayable_columns.inject([] {
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

IPMS/USA Region 12 Coordinator
http://ipmsr12.denhaven2.com/

Visit the Project Mercury Wiki Site
http://www.mercuryspacecraft.com/

Hi –

On Wed, 4 Oct 2006, Timothy G. wrote:

Firstly, you shouldn’t capitalize your variables like that. Ruby will
filter_columns = displayable_columns.map {|field_array|
field_array[0,2].reverse]

You could also do:

filter_columns = displayable_columns.map {|field_array|
field_array.values_at(1,0) }

David

I like this way:

filter_columns = displayable_columns.map {|(a,b)| [b,a] }

Caleb C. wrote:

I like this way:

filter_columns = displayable_columns.map {|(a,b)| [b,a] }

Nice! That wins! :slight_smile:

Thanks,
Wes

Timothy G. wrote:

Firstly, you shouldn’t capitalize your variables like that. Ruby will
treat any variable with a capital first letter as a constant - it will
behave differently.

Who said it wasn’t a constant ;)? It’s a set of static lookup data to
drive an options array for a SELECT form element in Rails.

Thanks for looking out for me though.

Wes