【问题标题】:Outputting the values of an array given an array of indexes在给定索引数组的情况下输出数组的值
【发布时间】:2018-05-29 22:18:12
【问题描述】:

给定一个数组,如words = ["hello", ", ", "world", "!"],我需要操作由字母组成的元素,所以最后我会得到一个字符串,如"*hello*, *world*!"

我已经设法从包含使用words.map.with_index { |element, index| index if element[[/a-zA-Z+/]] == element }.compact 的字母的数组中检索索引,它们是[0, 2]

我如何在函数中使用这些索引,以便我可以操纵单词?

【问题讨论】:

  • 不清楚。为什么要收集索引而不是直接收集或修改单词?
  • 我认为你有点过度思考这个问题。由于所需的最终结果是一个字符串,因此在这种情况下将其转换为 String 然后使用String 提供的words.join.gsub(/\w+/) {|m| "*#{m}*"} 方法操作它是最有意义的@
  • @engineersmnky 或者使用 Stefan 提供的答案的变体略短 here words.join.gsub(/\w+/,'*\0*')
  • @SagarPandya Nah,words.join.gsub(/\b/, '*').
  • @SagarPandya '*\0*' 究竟做了什么?

标签: arrays ruby string loops


【解决方案1】:
words.reject { |word| word.match?(/\p{^L}/) }.
      map { |word| "*%s*" % word }.
      join(', ')
  #=> "*hello*, *world*"

【讨论】:

    【解决方案2】:

    您不需要索引。如果您希望能够对每个数组元素应用任意逻辑,请使用不带索引的map

    words.map{|w| w.gsub(/[a-zA-Z]+/,'*\0*')}.join
    

    正如其他人指出的那样,对于您给出的示例,您根本不需要处理数组,只需将其加入一个字符串即可。例如:

    words.join.gsub(/[a-zA-Z]+/,'*\0*')
    

    【讨论】:

    • 好吧,我会说它失败了,例如 ["hello", ", ", "42", "!"] 它变成了 "*hello*, *42*!",用星号包围了 number。 (这是我自己没有将其发布为答案的原因之一,而只是作为对以前 cmets 的评论回复)
    • 好点,我已将其更改为使用 OP 的正则表达式。嘿,根据正则表达式,数字是单词字符:)
    【解决方案3】:

    尝试使用正则表达式,这将使您的工作变得轻松。您可以在将元素提取到数组中后对其进行操作

    words = ["hello", ", ", "world", "!"]
    array = []
    words.each do |a|
      array << a if /\w/.match(a)
    end
    
    puts array
    
    hello
    world
    

    【讨论】:

    • 我认为 OP 想要"*hello*, *world*!"
    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多