Krzysztof Witczak
Krzysztof Witczak

Reputation: 512

Ruby array of arrays find by inner array value

I have array of arrays, which looks like this:

a = [['1','1500','SomeName','SomeSurname'],
['2','1500','SomeName2','SomeSurname2'],
['3','1500','SomeName3','SomeSurname3'],
['4','1501','SomeName','SomeSurname'],
...]

I can get sub-array of this array with all rows containing '1500' value by .each function and simple if, but if a.length is large, it's taking too much time! How can I get all rows from a with certain a[1] value, without iterating over a?

Upvotes: 6

Views: 5020

Answers (3)

Andrey Deineko
Andrey Deineko

Reputation: 52377

Enumerable#find_all is what you are looking for:

a.find_all { |el| el[1] == '1500' } # a.select will do the same

Upvotes: 10

ABrowne
ABrowne

Reputation: 1604

You have a few options, you could use a find:

a.find { |l| l[1] == '5' }

This would find the array that matches the first 5

You need to use find_all to find all:

a.find_all { |l| l[1] == '5' }

Upvotes: 7

Lars Haugseth
Lars Haugseth

Reputation: 14881

Use select to get all matching elements:

a.select { |e| e[1] == '1500' }

Upvotes: 1

Related Questions