【问题标题】:Ruby gsub through arrayRuby gsub 通过数组
【发布时间】:2017-03-02 07:42:55
【问题描述】:

我有一个数组

arr = ['10kg','5kg','7','15kg','25']

所以我想删除所有kg,如果存在,返回字符串

"'10kg','5kg','7kg','15kg','25kg'" 

我试过了

kgs = arr.split(',').gsub('kg','')+'kg' 

但这是一个糟糕的解决方案。

【问题讨论】:

  • 删除 kg 并仍然返回?...
  • "remove all kg if it exists" – 好像你想添加 kg 如果它丢失了。你能澄清一下吗?
  • @Stefan 如果存在我想删除,如果不存在则添加:)
  • 如果存在则删除,如果不存在则添加将导致['10','5','7kg','15','25kg']。因此,您应该了解自己想要什么,或者更改所需的输出您提供的 if 如果存在则删除并如果不存在则添加确实是您想要的。
  • 如果任何给定的问题解决了您的问题,请确保您接受答案或编辑问题以使其更清楚,因为目前您提供的预期输出和您的评论是矛盾的。

标签: ruby string gsub


【解决方案1】:
a.map { |str| "'#{str.to_i}kg'" }.join(',')
#=> "'10kg','5kg','7kg','15kg','25kg'"

【讨论】:

  • 我也有同样的想法,但在现实生活中我想我会使用"'#{str[/\d+/]}kg'"
  • @CarySwoveland 是的,这看起来更逼真。由于我目前不在笔记本电脑上,因此请随时使用此选项编辑答案
  • 最好保持原样。读者会吃掉聪明的答案。
【解决方案2】:
['10kg','5kg','7','15kg','25'].map(&:to_i).map { |e| "#{e}kg" }
#⇒ [
#  [0] "10kg",
#  [1] "5kg",
#  [2] "7kg",
#  [3] "15kg",
#  [4] "25kg"
# ]

['10kg','5kg','7','15kg','25'].map(&:to_i)
                              .map { |e| "'#{e}kg'" }
                              .join(',')
#⇒ "'10kg','5kg','7kg','15kg','25kg'"

【讨论】:

  • 如果您使用.to_i 来删除kg 部分,这不是一个糟糕的主意,为什么不直接使用"'#{e.to_i}kg'"
  • @tadman 我试图同时回答“如果存在,我想删除所有公斤”和“返回字符串”这两个问题 :)
  • 原始问题提出的问题超出了应有的范围,但我喜欢您解决问题的方法。
【解决方案3】:

如果你想在所有元素中添加kg 字符串,jo 可以使用这个

arr.map{|s| s[/kg$/] ? s : s + 'kg'}.join(', ')
# => "10kg, 5kg, 7kg, 15kg, 25kg"

或者如果您想“如果存在则删除,如果不存在则添加”。

arr.map{|s| s[/kg$/] ? s.gsub('kg', '') : s + 'kg'}.join(', ')
# => "10, 5, 7kg, 15, 25kg"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2012-04-12
    相关资源
    最近更新 更多