2016-10-22 12 views
0

配列Rubyで配列の2番目の要素を取得する方法:は、次のように私はセットを持って

tagged_text = [["VB", "go"], ["VBG", "going"]] 

私はすべて取得しようとしています:

verb_tag_set = Set.new ["VB", "VBD", "VBG", "VBN", "VBP", "VBZ", "MD"] 

マイtagged_text配列は、次のものが含まverb_tag_set内の項目の1つと一致する要素を含む配列を選択することによって、各配列の2行目の要素の値を取得します。

verb_tagged_array = tagged_text.select{|el| el[1] if verb_tag_set.include?(el[0])} 
    verb_tagged_array.map{|row| row[1]} 

これは機能しますが、私は1行で配列を取得できるはずです。

このコードを改善する方法についてのアイデアはありますか?

NOOB(ルビーとNOOB)

+2

あなたの質問はちょっと混乱しています。第1に、Rubyには「行」を持つ配列の概念がありません。また、 'verb_tag_set.include?(el [1])'がある場合は 'verb_tag_set.include?(el [0])'を意味せず、次の行で 'row [1]'にする必要がありますか?あなたが望む出力(配列)を表示するのに役立ちます。 –

+0

謝罪。私は編集をした。実際にtagged_text配列を間違った順序で書きました。それを指摘してくれてありがとう。 – chell

答えて

1

次のように表示されます。

require 'set' 

verb_tag_set = Set.new ["VB", "VBD", "VBG", "VBN", "VBP", "VBZ", "MD"]  
tagged_text = [["VB", "go"], ["VBG", "going"]] 

tagged_text.select { |a,b| verb_tag_set.include?(a) }.map(&:last) 
    #=> ["go", "going"] 
+0

ruby​​の 'map_reduce'機能が不足していることがよくあります。 – mudasobwa

+0

私は自分のレベルで理解しやすいので、私はこの答えを選んだ。両方とも素晴らしいです。 – chell

1
require 'set' 

verb_tag_set = Set.new ["VB", "VBD", "VBG", "VBN", "VBP", "VBZ", "MD"]  
tagged_text = [["VB", "go"], ["VBG", "going"]] 

verb_tag_set.map(&tagged_text.to_h.method(:[])).compact 
#⇒ [ "go", "going" ] 

ここでは、その後nil秒の退治、セットのためのマッパー関数としてtagged_textを使用しています。

関連する問題