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:
@@ -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)
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user