Pchp.Library.Arrays.array_unique C# (CSharp) Method

array_unique() public static method

Removes duplicate values from an array.
Values are compared using string comparison method (ValueComparer.String).
is a null reference.
public static array_unique ( Context ctx, PhpArray array, ComparisonMethod sortFlags = ComparisonMethod.String ) : PhpArray
ctx Pchp.Core.Context Current runtime context.
array Pchp.Core.PhpArray The array which duplicate values to remove.
sortFlags ComparisonMethod Specifies how the values are compared to be identical.
return Pchp.Core.PhpArray
        public static PhpArray array_unique(Context ctx, PhpArray array, ComparisonMethod sortFlags = ComparisonMethod.String)
        {
            if (array == null)
            {
                //PhpException.ArgumentNull("array");
                //return null;
                throw new ArgumentNullException();
            }

            IComparer<PhpValue> comparer;
            switch (sortFlags)
            {
                case ComparisonMethod.Regular:
                    comparer = PhpComparer.Default; break;
                case ComparisonMethod.Numeric:
                    comparer = PhpNumericComparer.Default; break;
                case ComparisonMethod.String:
                    comparer = new PhpStringComparer(ctx); break;
                case ComparisonMethod.LocaleString:
                //comparer = new PhpLocaleStringComparer(ctx); break;
                default:
                    //PhpException.ArgumentValueNotSupported("sortFlags", (int)sortFlags);
                    //return null;
                    throw new ArgumentException(nameof(sortFlags));
            }

            var result = new PhpArray(array.Count);

            var/*!*/identitySet = new HashSet<object>();

            // get only unique values - first found
            using (var enumerator = array.GetFastEnumerator())
                while (enumerator.MoveNext())
                {
                    if (identitySet.Add(enumerator.CurrentValue.GetValue()))
                    {
                        result.Add(enumerator.Current);
                    }
                }

            //result.InplaceCopyOnReturn = true;
            return result;
        }