bui 1 rok pred
rodič
commit
a326ffbb1e
2 zmenil súbory, kde vykonal 37 pridanie a 0 odobranie
  1. 10 0
      pkg/exprhelpers/expr_lib.go
  2. 27 0
      pkg/exprhelpers/helpers.go

+ 10 - 0
pkg/exprhelpers/expr_lib.go

@@ -25,6 +25,16 @@ var exprFuncs = []exprCustomFunc{
 		function:  Flatten,
 		function:  Flatten,
 		signature: []interface{}{},
 		signature: []interface{}{},
 	},
 	},
+	{
+		name:      "Distinct",
+		function:  Distinct,
+		signature: []interface{}{},
+	},
+	{
+		name:      "FlattenDistinct",
+		function:  FlattenDistinct,
+		signature: []interface{}{},
+	},
 	{
 	{
 		name:     "Distance",
 		name:     "Distance",
 		function: Distance,
 		function: Distance,

+ 27 - 0
pkg/exprhelpers/helpers.go

@@ -173,6 +173,33 @@ func FileInit(fileFolder string, filename string, fileType string) error {
 
 
 // Expr helpers
 // Expr helpers
 
 
+func Distinct(params ...any) (any, error) {
+
+	if rt := reflect.TypeOf(params[0]).Kind(); rt != reflect.Slice && rt != reflect.Array {
+		return nil, nil
+	}
+	array := params[0].([]interface{})
+	if array == nil {
+		return nil, nil
+	}
+
+	var exists map[any]bool = make(map[any]bool)
+	var ret []interface{} = make([]interface{}, 0)
+
+	for _, val := range array {
+		if _, ok := exists[val]; !ok {
+			exists[val] = true
+			ret = append(ret, val)
+		}
+	}
+	return ret, nil
+
+}
+
+func FlattenDistinct(params ...any) (any, error) {
+	return Distinct(flatten(nil, reflect.ValueOf(params)))
+}
+
 func Flatten(params ...any) (any, error) {
 func Flatten(params ...any) (any, error) {
 	return flatten(nil, reflect.ValueOf(params)), nil
 	return flatten(nil, reflect.ValueOf(params)), nil
 }
 }