1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

sort: handle .sort(a.field > b.field)

This commit is contained in:
Alexander Medvednikov
2020-08-12 06:11:40 +02:00
parent 4bc0dde413
commit e5e31f7210
7 changed files with 55 additions and 14 deletions

View File

@@ -539,6 +539,16 @@ fn compare_ints(a, b &int) int {
return 0
}
fn compare_ints_reverse(a, b &int) int {
if *a > *b {
return -1
}
if *a < *b {
return 1
}
return 0
}
fn compare_floats(a, b &f64) int {
if *a < *b {
return -1
@@ -549,6 +559,16 @@ fn compare_floats(a, b &f64) int {
return 0
}
fn compare_floats_reverse(a, b &f64) int {
if *a > *b {
return -1
}
if *a < *b {
return 1
}
return 0
}
// []int.sort sorts array of int in place in ascending order.
pub fn (mut a []int) sort() {
a.sort_with_compare(compare_ints)

View File

@@ -695,6 +695,11 @@ fn test_eq() {
*/
}
struct User {
age int
name string
}
fn test_sort() {
mut a := ['hi', '1', '5', '3']
a.sort()
@@ -717,6 +722,20 @@ fn test_sort() {
assert nums[2] == 42
assert nums[3] == 67
assert nums[4] == 108
//
mut users := [User{22, 'Peter'}, User{20, 'Bob'}, User{25, 'Alice'}]
users.sort(a.age < b.age)
assert(users[0].age == 20)
assert(users[1].age == 22)
assert(users[2].age == 25)
assert(users[0].name == 'Bob')
assert(users[1].name == 'Peter')
assert(users[2].name == 'Alice')
//
users.sort(a.age > b.age)
assert(users[0].age == 25)
assert(users[1].age == 22)
assert(users[2].age == 20)
}
fn test_f32_sort() {