@@ -3404,6 +3404,24 @@ static QVariant fcnArrayIntersect( const QVariantList& values, const QgsExpressi
34043404 return QVariant ( false );
34053405}
34063406
3407+
3408+ static QVariant fcnArrayDistinct ( const QVariantList& values, const QgsExpressionContext*, QgsExpression* parent )
3409+ {
3410+ QVariantList array = getListValue ( values.at ( 0 ), parent );
3411+
3412+ QVariantList distinct;
3413+
3414+ for ( QVariantList::const_iterator it = array.constBegin (); it != array.constEnd (); ++it )
3415+ {
3416+ if ( !distinct.contains ( *it ) )
3417+ {
3418+ distinct += ( *it );
3419+ }
3420+ }
3421+
3422+ return distinct;
3423+ }
3424+
34073425static QVariant fcnArrayToString ( const QVariantList& values, const QgsExpressionContext*, QgsExpression* parent )
34083426{
34093427 QVariantList array = getListValue ( values.at ( 0 ), parent );
@@ -3872,6 +3890,7 @@ const QList<QgsExpression::Function*>& QgsExpression::Functions()
38723890 << new StaticFunction ( QStringLiteral ( " array_remove_all" ), ParameterList () << Parameter ( QStringLiteral ( " array" ) ) << Parameter ( QStringLiteral ( " value" ) ), fcnArrayRemoveAll, QStringLiteral ( " Arrays" ) )
38733891 << new StaticFunction ( QStringLiteral ( " array_cat" ), -1 , fcnArrayCat, QStringLiteral ( " Arrays" ) )
38743892 << new StaticFunction ( QStringLiteral ( " array_intersect" ), ParameterList () << Parameter ( QStringLiteral ( " array1" ) ) << Parameter ( QStringLiteral ( " array2" ) ), fcnArrayIntersect, QStringLiteral ( " Arrays" ) )
3893+ << new StaticFunction ( QStringLiteral ( " array_distinct" ), 1 , fcnArrayDistinct, QStringLiteral ( " Arrays" ) )
38753894 << new StaticFunction ( QStringLiteral ( " array_to_string" ), ParameterList () << Parameter ( QStringLiteral ( " array" ) ) << Parameter ( QStringLiteral ( " delimiter" ), true , " ," ) << Parameter ( QStringLiteral ( " emptyvalue" ), true , " " ), fcnArrayToString, QStringLiteral ( " Arrays" ) )
38763895 << new StaticFunction ( QStringLiteral ( " string_to_array" ), ParameterList () << Parameter ( QStringLiteral ( " string" ) ) << Parameter ( QStringLiteral ( " delimiter" ), true , " ," ) << Parameter ( QStringLiteral ( " emptyvalue" ), true , " " ), fcnStringToArray, QStringLiteral ( " Arrays" ) )
38773896
0 commit comments