-
-
Notifications
You must be signed in to change notification settings - Fork 436
Add uniq() builtin #647
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Not sure if usable or not, but I implemented this recently in my own project (source + docs) I couldn't figure out how to make the input accept and inline below func UniqSlice[T cmp.Ordered](in []T) []T {
slices.Sort(in)
return slices.Compact(in)
}
// Uniq takes a list of strings or interface{}, sorts them
// and remove duplicated values
var Uniq = expr.Function(
"uniq",
func(args ...any) (any, error) {
switch elements := args[0].(type) {
case []any:
var result []string
for _, element := range elements {
result = append(result, fmt.Sprintf("%s", element))
}
return UniqSlice(result), nil
case []string:
return UniqSlice(elements), nil
default:
return nil, fmt.Errorf("invalid input, must be an array of [string] or [interface], got %T", args[0])
}
},
new(func([]any) []string), // []any -> []string (when using map() that always return []any)
new(func([]string) []string), // []string -> []string
) |
This is one of the limitations of our virtual machine. As we use stack of For uniq() builtin to work not only with strings, we need to implement a more general approach, probably implementing in in bytecode or in VM. Implementing uniq() is much ore tricky 👀 |
Could u pls be more concrete and provide at least signature?) |
Fixed in #705 |
No description provided.
The text was updated successfully, but these errors were encountered: