从 Ruby 中的二维数组中的元素中选择索引项

Selecting indexed item froman element in a two dimensional array in Ruby

我不确定如何 select 给定第一个条件的二维数组中每个数组的第二个项目。这是一个与我要完成的类似的示例:

如果您在 Ruby、[[1,'a'],[2,'b'],[3,'c'],[4,'d']] 中有一个二维数组,您如何创建一个仅包含偶数数组中的字母的数组? (假设每个子数组的格式相同:[数字,字母]

虽然此代码不起作用,但我认为解决方案类似于:

array1 = [[1,'a'],[2,'b'],[3,'c'],[4,'d']]
array2 = array1.each do |num, letter|
  if num.even?
    return letter
  end
end

我希望 array2 在 运行 之后的值为 ['b', 'd']

您可以使用 collect 和 compact 组合来做到这一点:

array1.collect { |num, letter| letter if num.even? }.compact

首先,您 collect if 语句的所有结果,然后您 compact 删除所有 nil 项。

arr.each_with_object([]) { |(n,s),arr| arr << s if n.even? }
  #=> ["b", "d"] 

我本来可以添加解释性评论,但找不到任何需要解释的内容。

为了冗长,select每个数字为偶数的数组,然后映射它们的最后一个元素:

array1.select { |num, _| num.even? }.map(&:last)
# ["b", "d"]