2016-06-30 23 views
1

私は2つの配列があります。[name1, name2, name3]とスラグ名では、次のとおりです:[slug1, slug2, slug3]1次元ルビ配列を2次元配列に結合する方法は?

  • 学校名の配列
  • 学校のナメクジの配列

は学校名の配列があると言います。

ルビーでは、どのようにして配列を作るのですか[[name1, slug1], [name2, slug2], [name3, slug3]]

問題での私の試みはjavascript-ishの一種である:

<% var schoolSelect = []; 
for (var i=0; i<@schools.length; i++) 
    schoolSelect[i] = [@schools.pluck(:name)[i], @schools.pluck(:slug)[i]]; %> 
+0

ルビーのようには見えません。 – orde

+0

'(0..2)のようになります。それぞれの位置| 'コード'と '終わり' –

+0

私が言ったように、それはちょうど私がjavascriptの形でできるようにhaha - できたように試みた...私はすぐに人々があなたがコードを投稿しないときにそれを好きではないことを学んだ私は何かを投稿しました。 –

答えて

7

それが好きなのためにあなたがArray#zipを使用する:

names = %w(name1 name2 name3) 
slugs = %w(slug1 slug2 slug3) 

names.zip(slugs) 
# [["name1", "slug1"], ["name2", "slug2"], ["name3", "slug3"]] 
+1

すてきなアプローチ。コンボを削除しますが – oreoluwa

+0

@ololuwaありがとうございます。コピー/貼り付けエラー! :) –

2

を使用すると、そのデータ構造

schools = ["first", "second", "third"] 
slugs = ["a", "b", "c"] 
school_slugs = {} 

(0..2).each do |position| 
    school_slugs[schools[position]] = slugs[position] 
end 
# => 0..2 
school_slugs 
# => {"first" => "a", "second" => "b", "third" => "c"} 
のハッシュを検討し提案します

Arupのアプローチを使用している場合は、ハッシュへの、すなわち

[["name1", "slug1"], ["name2", "slug2"], ["name3", "slug3"]].to_h 

# => {"name1"=>"slug1", "name2"=>"slug2", "name3"=>"slug3"} 
+0

あなたは 'each_with_object({})'を使用して 'hash'をあらかじめ定義することができます –

0
names = %w(name1 name2 name3) 
slugs = %w(slug1 slug2 slug3) 

あなたは同じサイズの2つの配列を持っているときはいつでも、ここのように、

names.zip(slugs) 
    #=> [["name1", "slug1"], ["name2", "slug2"], ["name3", "slug3"]] 

[names, slugs].transpose 
    #=> [["name1", "slug1"], ["name2", "slug2"], ["name3", "slug3"]] 

は交換可能です。

関連する問題