如何从这些索引

时间:2017-08-09 19:00:04

标签: 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”的索引,并将其作为数组返回。下面的行将数组中的每个值递增+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"

3 个答案:

答案 0 :(得分:5)

array = [1,2,3,4,6]

"awesome".chars.values_at(*array).join
  #=> "wesoe"

答案 1 :(得分:1)

[1, 2, 3, 4].each_with_object(""){|i, s| s << "awesome"[i]}
# => "weso"

答案 2 :(得分:0)

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

> "awesome"[1..4]
=> "weso"

要在比赛结束后返回角色,请不要忘记你可以使用正则表达式:

> "Katy Perry is on the radio!".scan(/(?<=r)./)
=> ["r", "y", "a"]