blob: 14ffd5f06876cd4d8e0f3054aa78f9e4f0942b1b (
plain) (
tree)
|
|
"""Helper functions on lists."""
load(":private/set.bzl", "set")
def _dedup_on(f, list_):
"""deduplicate `list_` by comparing the result of applying
f to each element (e.g. comparing sub fields)
def compare_x(el):
return el.x
dedup_on([struct(x=3), struct(x=4), struct(x=3)], compare_x)
=> [struct(x=3), struct(x=4)]
"""
seen = set.empty()
deduped = []
for el in list_:
by = f(el)
if not set.is_member(seen, by):
set.mutable_insert(seen, by)
deduped.append(el)
return deduped
list = struct(
dedup_on = _dedup_on,
)
|