Maybe a noobie question, but how can I append to the inner ArrayList of a 2D Arraylist?
pub fn function(nums: [3][3]i32) !void {
var allocator_gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = allocator_gpa.deinit();
var diag = std.ArrayList(std.ArrayList(i32)).init(allocator_gpa.allocator());
defer diag.deinit();
for (nums, 0..) |row_val, row_idx| {
for (row_val, 0..) |col_val, col_idx| {
if (row_idx + col_idx < diag.items.len) {
// problem is not a new row
// but to append on the inner ArrayList
std.debug.print("ADD TO EXISTING ROW \n", .{});
std.debug.print("(row_idx, col_idx): ({d},{d}) \n", .{ row_idx, col_idx });
std.debug.print("value: {d} \n", .{col_val});
// fails: with memory leak
try diag.items[row_idx + col_idx].append(col_val);
} else {
std.debug.print("NEW ROW \n", .{});
std.debug.print("(row_idx, col_idx): ({d},{d}) \n", .{ row_idx, col_idx });
std.debug.print("value: {d} \n", .{col_val});
var new_row = std.ArrayList(i32).init(allocator_gpa.allocator());
defer new_row.deinit();
try new_row.append(col_val);
std.debug.print("new_row: {any} \n", .{new_row.items});
try diag.append(new_row);
}
}
}
}