LINUX.ORG.RU

Groovy: sort version string

 


0

1

Всем привет! Как в groovy можно сортировать строки версий, например:

  • 2.0.1
  • 2.0.10
  • 2.0.11
  • 2.0.12
  • 2.0.13
  • 2.0.14
  • 2.0.15
  • 2.0.16
  • 2.0.17
  • 2.0.18
  • 2.0.19
  • 2.0.2
  • 2.0.20
  • 2.0.21
  • 2.0.22
  • 2.0.23
  • 2.0.24
  • 2.0.25
  • 2.0.26
  • 2.0.27
  • 2.0.28
  • 2.0.29
  • 2.0.3

Ответ на: комментарий от gadzira
versions.sort({ a, b -> 
        def (x1, y1, z1) = a.split("\\.").collect { it.toInteger() }
        def (x2, y2, z2) = b.split("\\.").collect { it.toInteger() }
        (x1 <=> x2).asBoolean() ? x1 <=> x2 : 
        (y1 <=> y2).asBoolean() ? y1 <=> y2 : z1 <=> z2
    })
Lancelot
()
Ответ на: комментарий от gadzira

а должно быть вроде как: 2.0.3 ... 2.0.29

это что за способ версионирования такой, чтобы так было?
какая-то дичь наркоманская.

system-root ★★★★★
()

счас нет компа под рукой. примерно, для sort замыкание написать где элемент справа дополнять нулями справа.

anonymous
()
Ответ на: комментарий от system-root

Да не, довольно обычный MajorVersion.MinorVersion.Path Другое дело что сейчас репозитории умные и умеют в версии, а некоторые разработчики - нет.

gadzira
() автор топика
Ответ на: комментарий от system-root

А что, в твоём радужном мире трезвенников-зожников 3 не меньше 29?

slovazap ★★★★★
()

Напишите свой компаратор, разбирая строки через split(«\\.»).

На Java у меня этот пример есть - могу завтра выслать.

Bioreactor ★★★★★
()

Реальный пример

Мой тестовый пример

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestVersion {

    public static void main(String[] args) {
        
        List<ComparableVersion> l = new ArrayList<>();
        l.add(new ComparableVersion("2.0.1"));
        l.add(new ComparableVersion("2.12.2"));
        l.add(new ComparableVersion("2.1.2"));
        l.add(new ComparableVersion("13.1.2"));
        l.add(new ComparableVersion("3.1.2"));
        l.add(new ComparableVersion("2.0.2"));
        l.add(new ComparableVersion("2.0.12"));
        l.add(new ComparableVersion("2.0.1"));
        l.add(new ComparableVersion("2.0.13"));
        l.add(new ComparableVersion("2.0.4"));
        Object[] a = l.toArray();
        
        Arrays.sort(a);
        
        for (Object cv : a) {
            System.out.println(cv);
        }
    }
}

Вывод на экран

$ javac ComparableVersion.java

$ groovy -version
Groovy Version: 2.4.15 JVM: 1.8.0_121 Vendor: Oracle Corporation OS:

$ groovy TestVersion.groovy
2.0.1
2.0.1
2.0.2
2.0.4
2.0.12
2.0.13
2.1.2
2.12.2
3.1.2
13.1.2

$

Ссылка на файл из библиотеки для продукта Apache Maven -

https://github.com/apache/maven/blob/master/maven-artifact/src/main/java/org/...

(Этот файл я использую автономно.)

Bioreactor ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.