2017-08-09 73 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"]