Commit 1435604b84

Andrew Kelley <superjoe30@gmail.com>
2017-12-15 17:15:58
add sort.min and sort.max functions to stdlib
1 parent 2a8160e
Changed files (2)
std/mem.zig
@@ -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;
 }
std/sort.zig
@@ -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;
+}