2

私は3つの配列を持っています=

name = ["sample","test","sample"]
date = ["September","October","November"]
score = [10,20,30]

nameの各オブジェクトをループして、 に等しいすべてのオブジェクトのインデックス値を返したいと思いますsample。次に、そのインデックスを取得し、対応するオブジェクトを and で返すという考え方dateですscore。これは私が現在やっている方法です:

new_name_array = []
new_date_array = []
new_score_array = []
count = 0
name.each do |x|
  if x == 'sample'
    new_name_array << x
    new_date_array << date.index[count]
    new_score_aray << score.index[count]

    count += 1
  else
    count += 1
    next
  end
end

次に、必要な値のみを含む 3 つの新しい配列を作成し、スクリプトの残りの部分をこれらの配列に基づいて作成します。

これを行うためのより良い方法があることは知っています - これが最も効率的な方法ではありません。上記をよりきれいな方法で書くための提案を誰かが提供できますか?

サイドノート:

xを使用する代わりに、ループ内で整数値を取得する方法はありcount += 1ますか?

4

2 に答える 2

2

ここに1つの方法があります:

name = ["sample","test","sample"]
date = ["September","October","November"]
score = [10,20,30]

indexes = name.map.with_index{|e,i| i if e=='sample'}.compact
indexes # >> [0, 2]
new_date_array = date.values_at(*indexes) # >> ["September", "November"]
new_score_array = score.values_at(*indexes) # >> [10, 30]
于 2013-10-31T14:29:16.267 に答える