2017-08-09 71 views
0

返回的字符串(县)使用索引返回的字符串,我们可以做到这一点,像这样如何从这些指标

string = "hello" 
string[0] returns "h" 
string[1] returns "e" 
(and so on...) 

比方说,我有一个数组[1,2,3,4]和一个字符串“真棒”。我将如何从数组中返回相关的子字符串?

[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" 
+0

“我有这意味着每一个‘R’后返回的字符串的方法”所以你的例子的预期输出是什么? –

回答

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

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

对不起,我不得不做一个重大的编辑。没有包括我想解决的问题,这与原始问题有关。 – Benjamints

+0

请澄清问题(与编辑)。我没有看到它在上次编辑中的变化。在你的例子中,你使用偏移量'[1,2,3,4]'。读者可能想知道这些指数是否必然是连续的。如果不是,最好使用像'1,3,4,6'这样的东西。 –

+0

@CarySwoveland在这种情况下,会''真棒'.chars [* array] .join'也可以工作吗? –

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

针对相邻子不要忘记你可以切片的字符串:

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

而且比赛后返回字符,不要忘记你可以使用正则表达式:

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