Convertissez en entier puis triez. Il est également recommandé que pour les champs tels que IP, stockez les entiers directement dans la base de données au lieu des chaînes
Donnez-vous un exemple de conversion :
public long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
result |= ip << (i * 8);
}
return result;
}
public String longToIp(long ip) {
StringBuilder sb = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
sb.insert(0, Long.toString(ip & 0xff));
if (i < 3) {
sb.insert(0, '.');
}
ip = ip >> 8;
}
return sb.toString();
}
Vous pouvez d'abord convertir l'adresse IP en type int, puis la stocker dans la base de données. Ou prenez la chaîne dans la base de données et convertissez-la en Long en Java, puis comparez.
L'adresse IP se compose de quatre parties 0-255, chaque partie fait 1 octet et les quatre parties font exactement 4 octets, ce qui est un nombre entier.
Postgres a déjà un type IP, qui doit être utilisé comme type de champ lors de la conception
Quoi qu'il en soit, puisque vous avez mentionné ce problème, convertissez-le simplement en type IP et triez-le
Convertissez en entier puis triez. Il est également recommandé que pour les champs tels que IP, stockez les entiers directement dans la base de données au lieu des chaînes
Donnez-vous un exemple de conversion :
Vous pouvez d'abord convertir l'adresse IP en type int, puis la stocker dans la base de données. Ou prenez la chaîne dans la base de données et convertissez-la en Long en Java, puis comparez.
L'adresse IP se compose de quatre parties 0-255, chaque partie fait 1 octet et les quatre parties font exactement 4 octets, ce qui est un nombre entier.
shell peut trier :
Trier dans vim :
Enfin, je vais vous donner une version python : vous pouvez la modifier en java :
Convertissez-le en int puis triez-le
Idée : trier par chaque champ
L'idée est de convertir l'IP en un entier puis de trier :