Zig bounded LRU cache over slot array

Zig
const std = @import("std");

const Entry = struct { key: []const u8, val: u32, used: u64 = 0 };
const Lru = struct {
    slots: []Entry, n: usize = 0, tick: u64 = 0,

    fn put(self: *Lru, key: []const u8, val: u32) void {
        self.tick += 1;
        var victim: usize = 0;
        for (self.slots[0..self.n], 0..) |*e, i| {
            if (std.mem.eql(u8, e.key, key)) { e.val = val; e.used = self.tick; return; }
            if (e.used < self.slots[victim].used) victim = i;
        }
        if (self.n < self.slots.len) { self.slots[self.n] = .{ .key = key, .val = val, .used = self.tick }; self.n += 1; } else self.slots[victim] = .{ .key = key, .val = val, .used = self.tick };
    }

    fn get(self: *Lru, key: []const u8) ?u32 {
        self.tick += 1;
        for (self.slots[0..self.n]) |*e| if (std.mem.eql(u8, e.key, key)) { e.used = self.tick; return e.val; };
        return null;
    }
};