mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -04:00
[FEATURE] expression function array_reverse
This commit is contained in:
parent
a5ddab6cc8
commit
303f9b7cdd
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() );
|
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 )
|
static QVariant fcnArrayIntersect( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent )
|
||||||
{
|
{
|
||||||
const QVariantList array1 = QgsExpressionUtils::getListValue( values.at( 0 ), 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 );
|
return QVariant( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static QVariant fcnArrayDistinct( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent )
|
static QVariant fcnArrayDistinct( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent )
|
||||||
{
|
{
|
||||||
QVariantList array = QgsExpressionUtils::getListValue( values.at( 0 ), 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_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_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_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_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_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" ) )
|
<< 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('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_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()
|
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(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_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)" ) );
|
QgsExpression badArray( QStringLiteral( "array_get('not an array', 0)" ) );
|
||||||
QCOMPARE( badArray.evaluate( &context ), QVariant() );
|
QCOMPARE( badArray.evaluate( &context ), QVariant() );
|
||||||
QVERIFY( badArray.hasEvalError() );
|
QVERIFY( badArray.hasEvalError() );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user