diff --git a/src/util/set/hashset_del.scad b/src/util/set/hashset_del.scad index 75d69d5a..08425953 100644 --- a/src/util/set/hashset_del.scad +++ b/src/util/set/hashset_del.scad @@ -14,15 +14,16 @@ use <../find_index.scad>; function hashset_del(set, elem, eq = function(e1, e2) e1 == e2, hash = function(e) _str_hash(e)) = let( - bidx = hash(elem) % len(set), + leng_set = len(set), + bidx = hash(elem) % leng_set, bucket = set[bidx], - leng = len(bucket) + leng_bucket = len(bucket) ) - leng == 0 ? set : + leng_bucket == 0 ? set : let(i = find_index(bucket, function(e) eq(e, elem))) i == -1 ? set : - concat( - slice(set, 0, bidx), - [concat(slice(bucket, 0, i), slice(bucket, i + 1))], - slice(set, bidx + 1) - ); \ No newline at end of file + [ + for(j = 0; j < leng_set; j = j + 1) j == bidx ? + [for(k = 0; k < leng_bucket; k = k + 1) if(k != i) bucket[k]] : + set[j] + ];