我有三个数组=
name = ["sample","test","sample"]
date = ["September","October","November"]
score = [10,20,30]
我想循环遍历name
中的每个对象,并返回等于sample
的每个对象的索引值。我们的想法是获取该索引并返回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
然后我有三个只有我需要的值的新数组,我可以将其余的脚本从这些数组中删除。
我知道有更好的方法可以做到这一点 - 这绝不是最有效的方法。有人可以提供一些建议,以更清洁的方式写上述内容吗?
旁注:
有没有办法在循环中提取x
的整数值,而不是使用count += 1
?
答案 0 :(得分:4)
像
这样的东西 name.zip(date, score).select { |x| x.first == 'sample' }
你将得到一个三元素数组的数组:
[["sample", "September", 10], ["sample", "November", 30]]
此外,如果您在迭代时需要元素的索引,通常使用each_with_index
。
答案 1 :(得分:3)
这是一种方式:
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]