2016-03-21 8 views
-1

以下のコードは、他のすべての項目を通常の配列で取得するのに効果的です。多次元配列の特異点へのアクセス

letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]] 
letters.each.with_index do |i, index| 
    if (index %2 ==0) then 
    puts "#{[index, i]}" 
    end 
end 

しかし、多次元、私は0から各配列の2番目の項目を取得する方法を見つけ出すことはできませんで - >b1 - >dなど任意のアイデア?

+0

、何をしたいletters.flatten.each.with_index' 'ですか? –

+0

「[mcve]」をお読みください。 –

+0

こんにちはスズメ、ありがとう..私には、これはコードを書く最も簡単な方法でした。 )すべての人はまだ専門家ではありません;) – whatabout11

答えて

1
letters.each do |letter| 
    puts letter[1] # Will give you second item of sub array 
end 

あなたはサブアレイのも、インデックスでアイテムを取得したい場合は、サブ配列をループしていも

letters.each do |letter| 
    letter.each.with_index do |l, i| 
    if (i %2 ==0) then 
     puts "#{[l, i]}" 
    end 
    end 
end 
+0

ありがとう、私はあなたの2番目の例を使用して、i%2 == 0(1番目のアイテム)の条件をi%2 == 1(2番目のアイテム)。このように書いてくれてありがとう、それは私が概念を理解するのに役立ちます。 – whatabout11

-1

次の操作を行うことができます

letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]] 
letters.each.with_index do |element, index| 
    if (index %2 ==0) then 
     puts "#{[index, element[1]]}" 
    end 
end 

=> [0, "b"] 
    [2, "f"] 
    [4, "j"] 

lettersを反復する間、elementは配列です。そのままフィールドにアクセスできます。

EDIT:
あなたが本当にすべての要素がちょうど条件を削除する場合:

letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]] 
letters.each.with_index do |element, index| 
    puts "#{[index, element[1]]}" 
end 

=> [0, "b"] 
    [1, "d"] 
    [2, "f"] 
    [3, "h"] 
    [4, "j"] 
+0

慎重に質問を読んでください。あなたのソリューションは '' d ''と' 'h" 'を出力しませんが、要件は**各配列の2番目の項目を0 - > b、1 - > d ** –

+0

さて、私は、OPの中には、ループ内の状態が何であるかを少なくとも知っていると思います。質問はおそらく間違っています。とにかく私は質問の両方の解釈をカバーするために私の答えを編集します。 – rdupz

0

のは簡単で忘れないでみましょう:最初と:配列の最後の性質。万が一

irb(main):001:0> letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]] 
=> [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]] 
irb(main):002:0> puts letters.map(&:last).to_s 
["b", "d", "f", "h", "j"] 
0
letters.each_index.zip(letters.transpose.last) 
    #=> [[0, "b"], [1, "d"], [2, "f"], [3, "h"], [4, "j"]]