add sort.min and sort.max functions to stdlib

This commit is contained in:
Andrew Kelley 2017-12-15 11:15:58 -05:00
parent 2a8160e80f
commit 1435604b84
2 changed files with 26 additions and 6 deletions

View File

@ -511,9 +511,8 @@ fn testWriteIntImpl() {
pub fn min(comptime T: type, slice: []const T) -> T {
var best = slice[0];
var i: usize = 1;
while (i < slice.len) : (i += 1) {
best = math.min(best, slice[i]);
for (slice[1..]) |item| {
best = math.min(best, item);
}
return best;
}
@ -524,9 +523,8 @@ test "mem.min" {
pub fn max(comptime T: type, slice: []const T) -> T {
var best = slice[0];
var i: usize = 1;
while (i < slice.len) : (i += 1) {
best = math.max(best, slice[i]);
for (slice[1..]) |item| {
best = math.max(best, item);
}
return best;
}

View File

@ -1132,3 +1132,25 @@ fn fuzzTest(rng: &std.rand.Rand) {
}
}
}
pub fn min(comptime T: type, items: []T, lessThan: fn(lhs: &const T, rhs: &const T)->bool) -> T {
var i: usize = 0;
var smallest = items[0];
for (items[1..]) |item| {
if (lessThan(item, smallest)) {
smallest = item;
}
}
return smallest;
}
pub fn max(comptime T: type, items: []T, lessThan: fn(lhs: &const T, rhs: &const T)->bool) -> T {
var i: usize = 0;
var biggest = items[0];
for (items[1..]) |item| {
if (lessThan(biggest, item)) {
biggest = item;
}
}
return biggest;
}