Индекс Ruby для каждого подстроки [дубликат]

Мне нравится делать это, оценивая записи по некоторым столбцам. В этом случае значения ранга rev группируются по id. Те, у кого выше rev, будут иметь более низкий рейтинг. Таким образом, наивысший rev будет иметь ранжирование 1.

select id, rev, content
from
 (select
    @rowNum := if(@prevValue = id, @rowNum+1, 1) as row_num,
    id, rev, content,
    @prevValue := id
  from
   (select id, rev, content from YOURTABLE order by id asc, rev desc) TEMP,
   (select @rowNum := 1 from DUAL) X,
   (select @prevValue := -1 from DUAL) Y) TEMP
where row_num = 1;

Не уверен, что введение переменных делает все это медленнее. Но, по крайней мере, я не дважды запрашиваю YOURTABLE.

25
задан Austin Richardson 9 March 2011 в 06:16
поделиться

3 ответа

Используя Ruby 1.8.6+, вы можете сделать это:

require 'enumerator' #Only for 1.8.6, newer versions should not need this.

s = "AustinTexasDallasTexas"
positions = s.enum_for(:scan, /Texas/).map { Regexp.last_match.begin(0) }

Это создаст массив с:

=> [6, 17]
47
ответ дан Sean Hill 5 September 2018 в 09:31
поделиться
"AustinTexasDallasTexas".gsub(/Texas/).map { Regexp.last_match.begin(0) }
  #=> [6, 17]
0
ответ дан Cary Swoveland 5 September 2018 в 09:31
поделиться

Вид, см. String#index

"AustinTexasDallasTexas".index /Texas/
=> 6

Теперь вы можете расширить API-интерфейс String.

class String
  def indices e
    start, result = -1, []
    result << start while start = (self.index e, start + 1)
    result
  end
end
p "AustinTexasDallasTexas".indices /Texas/
=> [6, 17]
25
ответ дан DigitalRoss 5 September 2018 в 09:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: