Старый пост, но я пытался его зафиксировать и подумал, что поделюсь тем, что у меня работает. Я использую ruby-скрипт с расширением класса String.
class String
def explode
self.split(/-|_|\./).collect {|i| if i == "0" || i.to_i > 0; then i = i.to_i; end; i}
end
end
Это разбивает заданную строку на массив, где группа чисел преобразуется в сортируемое числовое значение (а не остается в виде строки).
Например:
ruby -r./string_ext.rb -e ' puts %Q{package-0.1-SNAPSHOT201212031}.explode.inspect'
#=> ["package", 0, 1, "SNAPSHOT201212031"]
ruby -r./string_ext.rb -e ' puts %Q{package-0.2-SNAPSHOT201212031}.explode.inspect'
#=> ["package", 0, 2, "SNAPSHOT201212031"]
# the comparison of the resulting arrays is then very straight forward
ruby -r./string_ext.rb -e ' puts %Q{package-0.1-SNAPSHOT201212031}.explode <=> %Q{package-0.2-SNAPSHOT201212030}.explode'
#=> -1
Где -1 означает, что первый элемент меньше второго, 0 означает, что они равны, а 1 означает, что второй элемент меньше первого.
1 <=> 2 #=> -1
2 <=> 2 #=> 0
3 <=> 2 #=> 1
Используя этот подход, довольно просто получить наибольшее значение из массива похожих элементов (например, массива rpm, связанного с одним и тем же пакетом).
person
BenH
schedule
04.03.2015