mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-03 00:02:25 -05:00
Merge pull request #4970 from andreasneumann/array_reverse
[FEATURE] expression function array_reverse
This commit is contained in:
commit
736d732912
7
resources/function_help/json/array_reverse
Normal file
7
resources/function_help/json/array_reverse
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "array_reverse",
|
||||
"type": "function",
|
||||
"description": "Returns the given array with array values in reversed order.",
|
||||
"arguments": [ {"arg":"array","description":"an array"} ],
|
||||
"examples": [ { "expression":"array_reverse(array(2,4,0,10))", "returns":"array: 10,0,4,2"}]
|
||||
}
|
@ -3602,6 +3602,13 @@ static QVariant fcnArrayCat( const QVariantList &values, const QgsExpressionCont
|
||||
return convertToSameType( list, values.at( 0 ).type() );
|
||||
}
|
||||
|
||||
static QVariant fcnArrayReverse( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent )
|
||||
{
|
||||
QVariantList list = QgsExpressionUtils::getListValue( values.at( 0 ), parent );
|
||||
for ( int k = 0, s = list.size(), max = ( s / 2 ); k < max; k++ ) list.swap( k, s - ( 1 + k ) );
|
||||
return list;
|
||||
}
|
||||
|
||||
static QVariant fcnArrayIntersect( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent )
|
||||
{
|
||||
const QVariantList array1 = QgsExpressionUtils::getListValue( values.at( 0 ), parent );
|
||||
@ -3613,7 +3620,6 @@ static QVariant fcnArrayIntersect( const QVariantList &values, const QgsExpressi
|
||||
return QVariant( false );
|
||||
}
|
||||
|
||||
|
||||
static QVariant fcnArrayDistinct( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent )
|
||||
{
|
||||
QVariantList array = QgsExpressionUtils::getListValue( values.at( 0 ), parent );
|
||||
@ -4257,6 +4263,7 @@ const QList<QgsExpressionFunction *> &QgsExpression::Functions()
|
||||
<< new QgsStaticExpressionFunction( QStringLiteral( "array_remove_at" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "array" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "pos" ) ), fcnArrayRemoveAt, QStringLiteral( "Arrays" ) )
|
||||
<< new QgsStaticExpressionFunction( QStringLiteral( "array_remove_all" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "array" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "value" ) ), fcnArrayRemoveAll, QStringLiteral( "Arrays" ) )
|
||||
<< new QgsStaticExpressionFunction( QStringLiteral( "array_cat" ), -1, fcnArrayCat, QStringLiteral( "Arrays" ) )
|
||||
<< new QgsStaticExpressionFunction( QStringLiteral( "array_reverse" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "array" ) ), fcnArrayReverse, QStringLiteral( "Arrays" ) )
|
||||
<< new QgsStaticExpressionFunction( QStringLiteral( "array_intersect" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "array1" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "array2" ) ), fcnArrayIntersect, QStringLiteral( "Arrays" ) )
|
||||
<< new QgsStaticExpressionFunction( QStringLiteral( "array_distinct" ), 1, fcnArrayDistinct, QStringLiteral( "Arrays" ) )
|
||||
<< new QgsStaticExpressionFunction( QStringLiteral( "array_to_string" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "array" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "delimiter" ), true, "," ) << QgsExpressionFunction::Parameter( QStringLiteral( "emptyvalue" ), true, "" ), fcnArrayToString, QStringLiteral( "Arrays" ) )
|
||||
|
@ -2420,6 +2420,8 @@ class TestQgsExpression: public QObject
|
||||
|
||||
QCOMPARE( QgsExpression( "array_intersect(array('1', '2', '3', '4'), array('4', '0', '2', '5'))" ).evaluate( &context ), QVariant( true ) );
|
||||
QCOMPARE( QgsExpression( "array_intersect(array('1', '2', '3', '4'), array('0', '5'))" ).evaluate( &context ), QVariant( false ) );
|
||||
|
||||
QCOMPARE( QgsExpression( "array_reverse(array('Dufour','Valmiera','Chugiak','Wien','Pisa','Lyon','Essen','Nødebo','Las Palmas')) = array('Las Palmas','Nødebo','Essen','Lyon','Pisa','Wien','Chugiak','Valmiera','Dufour')" ).evaluate( &context ), QVariant( true ) );
|
||||
}
|
||||
|
||||
void eval_int_array()
|
||||
@ -2482,6 +2484,8 @@ class TestQgsExpression: public QObject
|
||||
QCOMPARE( QgsExpression( "array_intersect(array(1, 2, 3, 4), array(4, 0, 2, 5))" ).evaluate( &context ), QVariant( true ) );
|
||||
QCOMPARE( QgsExpression( "array_intersect(array(1, 2, 3, 4), array(0, 5))" ).evaluate( &context ), QVariant( false ) );
|
||||
|
||||
QCOMPARE( QgsExpression( "array_reverse(array(2,4,0,10)) = array(10,0,4,2)" ).evaluate( &context ), QVariant( true ) );
|
||||
|
||||
QgsExpression badArray( QStringLiteral( "array_get('not an array', 0)" ) );
|
||||
QCOMPARE( badArray.evaluate( &context ), QVariant() );
|
||||
QVERIFY( badArray.hasEvalError() );
|
||||
|
Loading…
x
Reference in New Issue
Block a user