2015-10-05 61 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