2015-10-05 24 views
2

我想獲取具有重複字符的字符串的索引。但是,如果我有相同的字符,它使返回該字符第一次出現的指數獲取紅寶石中所有字符的索引

str = "sssaadd" 

    str.each_char do |char| 
     puts "index: #{str.index(char)}" 
    end 

Output:- 
index: 0 
index: 0 
index: 0 
index: 3 
index: 3 
index: 5 
index: 5 
+1

你是不是想總是得到所有字符加上最後的結果他們的索引位置?或者讓一些更一般的東西(即一種方法告訴你字符串中第5'z'的位置,或者一個方法,如果傳遞一個字符串和一個字符,給你所有字符的索引位置)?它可能是值得展示一個想象的功能,返回你想要的。 。 。 –

回答

4

使用Enumerator#with_index

str = "sssaadd" 
str.each_char.with_index do |char, index| 
    puts "#{index}: #{char}" 
end 
+0

是的,謝謝你的作品。 –

1

如果你想找到您還可以使用此

str = "sssaadd" 

    arr=str.split('') 

    arr.each_with_index do|char,index| 
    puts "index : #{index}" 
    end 
2

重複子串的所有索引,你可以使用這個:

'sssaadd'.enum_for(:scan, /(.)\1/).map do |match| 
    [Regexp.last_match.begin(0), match.first] 
end 
# => [[0, "s"], [3, "a"], [5, "d"]] 

在這裏,我們scan所有的字符串由正則表達式,它發現重複的字符。訣竅是scan的塊形式不會返回任何結果,因此爲了使其返回塊結果,我們將scan轉換爲枚舉數並在其後添加map以獲得所需的結果。

參見:ruby regex: match and get position(s) of