diff --git a/src/util/_impl/_dedup_impl.scad b/src/util/_impl/_dedup_impl.scad index dcf7d113..b2e6d8ee 100644 --- a/src/util/_impl/_dedup_impl.scad +++ b/src/util/_impl/_dedup_impl.scad @@ -1,5 +1,13 @@ use ; +function _dedup_sorted(lt, leng) = + leng == 0 ? lt : + concat( + [lt[0]], + [for(i = [1:leng - 1]) if(lt[i] != lt[i - 1]) lt[i]] + ); + function _dedup(src, dest, leng, i = 0) = i == leng ? dest : - has(dest, src[i]) ? _dedup(src, dest, leng, i + 1) : _dedup(src, concat(dest, [src[i]]), leng, i + 1); + has(dest, src[i]) ? _dedup(src, dest, leng, i + 1) : + _dedup(src, concat(dest, [src[i]]), leng, i + 1); \ No newline at end of file diff --git a/src/util/dedup.scad b/src/util/dedup.scad index 0f0305b5..335b78eb 100644 --- a/src/util/dedup.scad +++ b/src/util/dedup.scad @@ -1,3 +1,5 @@ use ; -function dedup(lt) = _dedup(lt, [], len(lt)); \ No newline at end of file +function dedup(lt, sorted = false) = + sorted ? _dedup_sorted(lt, len(lt)) : + _dedup(lt, [], len(lt)); \ No newline at end of file