【问题标题】:Sum of first part of string in an array of strings字符串数组中字符串第一部分的总和
【发布时间】:2020-01-18 00:33:54
【问题描述】:

我有一个字符串数组,我需要从中提取第一个单词,将它们转换为整数并得到它们的总和。

例子:

["5 Apple", "5 Orange", "15 Grapes"]

预期输出 => 25

我的尝试:

["5","5","15"].map(&:to_i).sum

【问题讨论】:

  • array.map(&:split).map(&:first)array.map { |x| x.split.first }

标签: arrays ruby string


【解决方案1】:

我从你的问题中找到了答案。

["5 Apple", "5 Orange", "15 Grapes"].map(&:to_i).sum

如果数组中存在任何整数可转换值,那么它将自动转换为整数。

【讨论】:

    【解决方案2】:

    #split映射:

    ["5 Apple", "5 Orange", "15 Grapes"].map{|s| s.split.first.to_i }.sum
    => 25
    

    【讨论】:

      【解决方案3】:

      String#to_i 查找字符串开头的数字并将其转换为整数:

      'Foo'.to_i   # => 0
      '5 Bar'.to_i # => 5
      'Baz 5'.to_i # => 0 
      

      因此只需对to_i 的结果求和:

      ["5 Apple", "5 Orange", "15 Grapes"].sum(&:to_i) # => 25
      

      【讨论】:

      • sum 就足够了。它只有 Ruby 版本作为约束。
      • @SebastianPalma OP 的问题包括sum 所以我想他们有一个相关的版本。即使他们不这样做,他们也很有可能使用 ActiveSupport。
      【解决方案4】:
      ["5 Apple", "5 Orange", "15 Grapes"].sum { |w| w.split(' ').first.to_i }
      

      会成功的。

      【讨论】:

        【解决方案5】:

        我看到这是现在 Ruby 部分中最受欢迎的问题,所以这里有另一种方式:

        ["5 Apple", "5 Orange", "15 Grapes"].reduce(0) {|sum,n| sum + n.to_i}
        

        或者按照@EricDuminil 的建议,只需:

        ["5 Apple", "5 Orange", "15 Grapes"].sum(&:to_i)
        

        【讨论】:

        • @EricDuminil 你说得对,我已经编辑了我的答案。如果你想发布它,我会删除它。似乎也是这里的最佳解决方案。感谢您的建议
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        • 2018-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多