Ruby 如何从这些索引返回子字符串

Ruby 如何从这些索引返回子字符串,ruby,Ruby,要使用索引返回子字符串,我们可以这样做 string = "hello" string[0] returns "h" string[1] returns "e" (and so on...) 假设我有一个数组[1,2,3,4]和一个字符串“awesome”。如何从数组返回相关的子字符串 [1,2,3,4] should return "weso" 这是因为我有一个方法,它打算在每个“r”之后返回子字符串,但它失败了: 您可以看到,我已经找到了每个子字符串“r”的索引,并将其作为数组返回。下面

要使用索引返回子字符串,我们可以这样做

string = "hello"
string[0] returns "h"
string[1] returns "e"
(and so on...)
假设我有一个数组[1,2,3,4]和一个字符串“awesome”。如何从数组返回相关的子字符串

[1,2,3,4] should return "weso"

这是因为我有一个方法,它打算在每个“r”之后返回子字符串,但它失败了:

您可以看到,我已经找到了每个子字符串“r”的索引,并将其作为数组返回。下面的行将数组中的每个值递增+1

现在我需要通过数组中的相关索引从字符串返回子字符串

def pirates_say_arrrrrrrrr(string)

  all_index = (0 ... string.length).find_all {|i| string[i] ==  "r"}
  y = all_index.map do |i| i + 1
  end
  string[y.first..y.last]
end

# pirates_say_arrrrrrrrr("are you really learning Ruby?") # => "eenu"
# pirates_say_arrrrrrrrr("Katy Perry is on the radio!")   # => "rya"
[1,2,3,4]。每个_都带有_对象(“”{i,s|s“weso”
[1,2,3,4]。每个带有对象(“”{i,s | s“weso”的对象)

对于连续的子字符串,不要忘记可以对字符串进行切片:

> "awesome"[1..4]
=> "weso"
要在匹配后返回字符,请不要忘记可以使用正则表达式:

> "Katy Perry is on the radio!".scan(/(?<=r)./)
=> ["r", "y", "a"]
>“凯蒂·佩里在广播中!”。扫描(/(?[“r”,“y”,“a”]

对于连续的子字符串,不要忘记可以对字符串进行切片:

> "awesome"[1..4]
=> "weso"
要在匹配后返回字符,请不要忘记可以使用正则表达式:

> "Katy Perry is on the radio!".scan(/(?<=r)./)
=> ["r", "y", "a"]
>“凯蒂·佩里在广播中!”。扫描(/(?[“r”,“y”,“a”]

抱歉,我必须进行重大编辑。没有包括我正在尝试解决的与原始问题相关的问题。请澄清该问题(通过编辑)。我看不出它与上次编辑有何变化。在您的示例中,您使用了偏移量
[1,2,3,4]
。读者可能想知道这些索引是否一定是连续的。如果不是,最好使用
1,3,4,6
@CarySwoveland,在这种情况下,
“awesome”。chars[*array]。join
也起作用?@UlysseBN,请参阅。
['a','b','c','d'][0,2,3]会发生什么情况
?试试看。很抱歉,我必须进行一次重大编辑。没有包括我试图解决的与原始问题相关的问题。请澄清问题(通过编辑)。我看不出它与上次编辑有何变化。在您的示例中,您使用了偏移量
[1,2,3,4]
。读者可能想知道这些索引是否一定是连续的。如果不是,最好使用
1,3,4,6
@CarySwoveland在这种情况下,会
“很棒”。chars[*array]。join
也有效?@UlysseBN,请参阅。
['a','b','c','d'][0,2,3]会发生什么情况?试试看。“我有一个方法,用于在每个‘r’之后返回子字符串”,那么您的示例的预期输出是什么?“我有一个方法,用于在每个‘r’之后返回子字符串”,那么您的示例的预期输出是什么?