【问题标题】:Selecting indexed item froman element in a two dimensional array in Ruby从Ruby中的二维数组中的元素中选择索引项
【发布时间】:2020-09-28 05:46:17
【问题描述】:

在给定第一个条件的情况下,我不确定如何从二维数组中的每个数组中选择第二项。这是与我要完成的任务类似的示例:

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

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

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']

【问题讨论】:

    标签: ruby loops multidimensional-array each


    【解决方案1】:

    你可以通过 collect 和 compact 组合来做到这一点:

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

    首先,你 collect 删除 if 语句的所有结果,然后你 compact 删除所有出现的 nil

    【讨论】:

    • 这是否也改变了原始数组? --edit:我已经测试过了,但没有;谢谢!
    【解决方案2】:
    arr.each_with_object([]) { |(n,s),arr| arr << s if n.even? }
      #=> ["b", "d"] 
    

    我会添加解释性 cmets,但找不到任何需要解释的内容。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 2021-02-03
        相关资源
        最近更新 更多