mirror of
https://github.com/MontFerret/ferret.git
synced 2024-12-14 11:23:02 +02:00
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package arrays
|
|
|
|
import (
|
|
"github.com/MontFerret/ferret/pkg/runtime/core"
|
|
"github.com/MontFerret/ferret/pkg/runtime/values"
|
|
)
|
|
|
|
func NewLib() map[string]core.Function {
|
|
return map[string]core.Function{
|
|
"APPEND": Append,
|
|
"FIRST": First,
|
|
"FLATTEN": Flatten,
|
|
"INTERSECTION": Intersection,
|
|
"LAST": Last,
|
|
"MINUS": Minus,
|
|
"NTH": Nth,
|
|
"OUTERSECTION": Outersection,
|
|
"POP": Pop,
|
|
"POSITION": Position,
|
|
"PUSH": Push,
|
|
"REMOVE_NTH": RemoveNth,
|
|
"REMOVE_VALUE": RemoveValue,
|
|
"REMOVE_VALUES": RemoveValues,
|
|
"REVERSE": Reverse,
|
|
"SHIFT": Shift,
|
|
"SLICE": Slice,
|
|
"SORTED": Sorted,
|
|
"SORTED_UNIQUE": SortedUnique,
|
|
"UNION": Union,
|
|
"UNION_DISTINCT": UnionDistinct,
|
|
"UNIQUE": Unique,
|
|
"UNSHIFT": Unshift,
|
|
}
|
|
}
|
|
|
|
func ToUniqueArray(arr *values.Array) *values.Array {
|
|
hashTable := make(map[uint64]bool)
|
|
result := values.NewArray(int(arr.Length()))
|
|
|
|
arr.ForEach(func(item core.Value, _ int) bool {
|
|
h := item.Hash()
|
|
|
|
_, exists := hashTable[h]
|
|
|
|
if !exists {
|
|
hashTable[h] = true
|
|
result.Push(item)
|
|
}
|
|
|
|
return true
|
|
})
|
|
|
|
return result
|
|
}
|