...

вторник, 25 февраля 2014 г.

[Перевод] 7 трюков при работе с массивами в Ruby

ruby arrays

В данной статье описаны некоторые интересные трюки как можно эффективно использовать и работать с массивами в Ruby. Конечно же, есть РубиДок и множество других ресурсов, где подробно описаны все доступные методы, но здесь я хочу поделиться именно способами использования.


1. Как проверить или массив содержит все элементы другого массива




Например, вы хотите проверить или все импортированные е-мейлы уже есть в списке контактов:

imported_emails = [ 'john@doe.com', 'janet@doe.com' ]
existing_emails = [ 'john@doe.com', 'janet@doe.com' , 'fred@mercury.com' ]

puts 'already imported' if (imported_emails - existing_emails).empty?




Запуск в IRB:

already imported

=> nil

2. Как найти общие элементы в двух массивах




Например, если вам нужно найти общие теги в двух разных постах:

tags_post1 = [ 'ruby', 'rails', 'test' ]
tags_post2 = [ 'test', 'rspec' ]

common_tags = tags_post1 & tags_post2




Запуск в IRB:

=> [«test»]

3. Как соединить два массива, не дублируя повторяющиеся элементы



followeds1 = [ 1, 2, 3 ]
followeds2 = [ 2, 4, 5 ]

all_followeds = followeds1 | followeds2




Запуск в IRB:

=> [1, 2, 3, 4, 5]

4. Как сортировать массив хешей




Например, вы получаете данные от какого-то API, в виде масива хешей:

data = [
{
name: 'Christophe',
location: 'Belgium'
},
{
name: 'John',
location: 'United States of America'
},
{
name: 'Piet',
location: 'Belgium'
},
{
name: 'François',
location: 'France'
}
]




При отображении, вы хотите сортировать по полю location, тогда делаем так:

data.sort_by { |hsh| hsh[:location] }




Запуск в IRB:

=> [

{:name=>«Christophe», :location=>«Belgium»},

{:name=>«Piet», :location=>«Belgium»},

{:name=>«François», :location=>«France»},

{:name=>«John», :location=>«United States of America»}

]

5. Как получить уникальные элементы массива по определенному признаку




Например, вы хотите показывать случайные продукты на главной странице, но чтобы каждый продукт брался только из одной категории:

Product = Struct.new(:id, :category_id)

products = [
Product.new(1, 1),
Product.new(2, 2),
Product.new(3, 3),
Product.new(4, 1),
Product.new(5, 3),
Product.new(6, 5),
]

products = products.uniq &:category_id




Запуск в IRB:

=> [

#<struct Product id=1, category_id=1>,

#<struct Product id=2, category_id=2>,

#<struct Product id=3, category_id=3>,

#<struct Product id=6, category_id=5>

]

6. Как фильтровать строковые элементы массива




Например, у вас может быть массив с названиями книг, которые вы хотите фильтровать по какому-то ключевому слову:

books = [
'The Ruby Programming Language',
'Programming Ruby 1.9 & 2.0: The Pragmatic Programmers\' Guide (The Facets of Ruby)',
'Practical Object-Oriented Design in Ruby: An Agile Primer',
'Eloquent Ruby',
'Ruby on Rails Tutorial: Learn Web Development with Rails'
]

books = books.grep(/[Rr]ails/)




Запуск в IRB:

=> [«Ruby on Rails Tutorial: Learn Web Development with Rails»]

7. Как всегда возвращать массив




Например, у вас есть метод, который может возвращать список продуктов либо один продукт. Чтобы обеспечить чтобы возвращаемое значение всегда было массивом, вы можете использовать Array() или [*]:

def method
# …

[*products]
end


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий