Платформа 3V/Выражение/Расчет выражений/Работа с коллекциями: различия между версиями
A.griva (обсуждение | вклад) |
|||
(не показано 8 промежуточных версий 4 участников) | |||
Строка 9: | Строка 9: | ||
* ToBooleanList([0]) - преобразование массива или значения к коллекции логических элементов | * ToBooleanList([0]) - преобразование массива или значения к коллекции логических элементов | ||
* SortList([0], [1] = true) - Сортирует коллекцию по значениям. Первый операнд - это сама коллекция, второй - направление сортировки, true - по возрастанию, false - по убыванию. Второй операнд опциональный, если не задан, то подставляется значение true. | * SortList([0], [1] = true) - Сортирует коллекцию по значениям. Первый операнд - это сама коллекция, второй - направление сортировки, true - по возрастанию, false - по убыванию. Второй операнд опциональный, если не задан, то подставляется значение true. | ||
+ | * SkipNulls([0]) - возвращает коллекцию без null значений. | ||
== Редактирование коллекций == | == Редактирование коллекций == | ||
Строка 42: | Строка 43: | ||
== Поиск в коллекциях == | == Поиск в коллекциях == | ||
* FindIndex([0], [1]) - поиск индекса элемента в коллекции. Первый операнд - коллекция, второй - значение которое ищем. Если значение не нашлось, вернется -1. Индексация начинается 0. | * FindIndex([0], [1]) - поиск индекса элемента в коллекции. Первый операнд - коллекция, второй - значение которое ищем. Если значение не нашлось, вернется -1. Индексация начинается 0. | ||
− | * Rank([0], [1], [2] = true) - поиск индекса в коллекции после сортировки. Комбинация | + | * Rank([0], [1], [2] = true) - поиск индекса в коллекции после сортировки. Комбинация функций FindIndex и SortList, сперва переданная коллекция из первого операнда сортируется по возрастанию или убыванию (третий операнд), а затем в результирующей коллекции ищется индекс значения из второго операнда. |
* RankDouble([0], [1], [2] = true, [3] = 1E-9) - поиск индекса в коллекции вещественных значений после сортировки. Функция аналогична функции Rank, только использует вместо FindIndex функцию FindDoubleIndex, как следствие добавляется еще один опциональный операнд - точность при поиске (если значение не задано берется 1E-9). | * RankDouble([0], [1], [2] = true, [3] = 1E-9) - поиск индекса в коллекции вещественных значений после сортировки. Функция аналогична функции Rank, только использует вместо FindIndex функцию FindDoubleIndex, как следствие добавляется еще один опциональный операнд - точность при поиске (если значение не задано берется 1E-9). | ||
+ | * ValueOf([0], [1]) - получение значения элемента по его индексу в коллекции. Первый операнд - это коллекция, Второй операнд - это индекс элемента в коллекции, если необходимо получить значение последнего элемента, тогда можно указать в индексе "-1" - это интерпретируется расчетчиком как "длинна коллекции - 1", а "-2" = "длинна коллекции - 2" и тд... | ||
+ | |||
+ | <div align="right">'''''Реализовано в [[Описание_релизов/0.40.0 | версии 0.40]]'''''</div> | ||
+ | |||
+ | |||
+ | '''SumIf()''' | ||
+ | При необходимости складывать значение массива с условием, то следует использовать функцию SumIf(<collection>, <compareValue>, [<sum_collection>]), где | ||
+ | *collection - коллекция значений | ||
+ | *compareValue - значение, которое является условием для сложения | ||
+ | *sum_collection - коллекция значений, которые будут просуммированы. Если этот параметр не указан, будут просуммированы ячейки из первой коллекции. | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "SumIf(ToList([1]), '25')", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value":"25" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | Пример: <br> | ||
+ | |||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "SumIf([1], 2 )", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value": [0,1,2,2,30] | ||
+ | }, | ||
+ | {"id":2, | ||
+ | "value":[3,4,5,6, 555]} | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | На выходе получим значение 4, так как в коллекции 1 число 2 встретится на позиции 2, 3. | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "SumIf([1], 2 , [2] )", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value": [0,1,2,2,30] | ||
+ | }, | ||
+ | {"id":2, | ||
+ | "value":[3,4,5,6, 555]} | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | На выходе получим значение 11, так как в коллекции 1 число 2 встретится на позиции 2, 3, а в коллекции 2 на этих позициях стоят числа 5, 6, которые просуммируются и вернутся. | ||
+ | |||
+ | |||
+ | </div> | ||
+ | |||
+ | '''CountIf()''' | ||
+ | При необходимости посчитать количество вхождений значений в коллекцию следует использовать CountIf(<collection>, <compareValue>), где | ||
+ | *collection - коллекция значений | ||
+ | *compareValue - значение, которое является условием для сложения | ||
+ | <div style="width:700px;> | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "CountIf(ToList([1]), 'хо')", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value":"хо" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | |||
+ | '''SumIfExpression()''' | ||
+ | При необходимости складывать значение массива с условием, то следует использовать функцию SumIfExpression(<collection>, <expression>, [<sum_collection>]), где | ||
+ | *collection - коллекция значений | ||
+ | *expression - выражение, которое является условием для сложения. Формат выражения: '[0] <условие сравнения> <значение>', где [0] - приходящее значение из массива | ||
+ | *sum_collection - коллекция значений, которые будут просуммированы. Если этот параметр не указан, будут просуммированы ячейки из первой коллекции. | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "SumIfExpression(ToList([1]), '[0]>0')", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value":"2" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | '''CountIfExpression()''' | ||
+ | CountIfExpression(<collection>, <expression>), где | ||
+ | *collection - коллекция значений | ||
+ | *expression - выражение, которое является условием для сложения. Формат выражения: '[0] <условие сравнения> <значение>', где [0] - приходящее значение из массива | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "CountIfExpression(ToList([1]), '[0]>0')", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value":"2" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | |||
+ | '''FilterIfExpression()''' | ||
+ | Для того, чтобы вернуть коллекцию значений по выражению следует использовать функцию FilterIfExpression(<collection>, <expression>), где | ||
+ | *collection - коллекция значений | ||
+ | *expression - выражение, которое является условием для фильтрации. Формат выражения: '[0] <условие сравнения> <значение>', где [0] - приходящее значение из массива | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "FilterIfExpression(ToList([1]), '[0]>0')", | ||
+ | "operandValues": [ | ||
+ | { | ||
+ | "id": 1, | ||
+ | "value":"2" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div align="right">'''''Реализовано в [[Описание_релизов/0.42.0_-_Уильям_Уоллес| версии 0.42]]'''''</div> | ||
+ | '''Flatten()''' | ||
+ | Для того, чтобы объединить коллекцию коллекций в одну коллекцию следует использовать функцию Flatten(<collection>), где | ||
+ | *collection - коллекция коллекций | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "expression": "Flatten([1])", | ||
+ | "returnFirstParameterValue": false, | ||
+ | "operands": [ | ||
+ | { | ||
+ | "dictionaryId": 584, | ||
+ | "attribute": { | ||
+ | "discriminator": "OwnAttributeDefinitionDto", | ||
+ | "id": 2 | ||
+ | }, | ||
+ | "discriminator": "EntryExpressionByDictionaryRequest", | ||
+ | "id": 1, | ||
+ | "allowMultipleValues": true | ||
+ | } | ||
+ | ], | ||
+ | "id": 1, | ||
+ | "name": "Выражение", | ||
+ | "code": null | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | |||
+ | Пример выражения можно посмотреть [https://study.3v-cloud.com/navigator/#/home?objectId=1122 здесь] |
Текущая версия на 06:21, 23 декабря 2021
Содержание
Преобразование коллекций
- ToList([0]) - преобразование массива или значения к коллекции произвольных элементов
- ToDistinctList([0]) - преобразование массива или значения к коллекции уникальных произвольных элементов
- ToIntList([0]) - преобразование массива или значения к коллекции целочисленных элементов
- ToDoubleList([0]) - преобразование массива или значения к коллекции вещественных элементов
- ToStringList([0]) - преобразование массива или значения к коллекции строковых элементов
- ToDateList([0]) - преобразование массива или значения к коллекции дат
- ToBooleanList([0]) - преобразование массива или значения к коллекции логических элементов
- SortList([0], [1] = true) - Сортирует коллекцию по значениям. Первый операнд - это сама коллекция, второй - направление сортировки, true - по возрастанию, false - по убыванию. Второй операнд опциональный, если не задан, то подставляется значение true.
- SkipNulls([0]) - возвращает коллекцию без null значений.
Редактирование коллекций
Добавление единичных значений
- AddToList([0], [1]) - добавление произвольного элемента в коллекцию произвольных элементов
- AddToIntList([0], [1]) - добавление целочисленного элемента в коллекцию целочисленных элементов
- AddToDoubleList([0], [1]) - добавление произвольного элемента в коллекцию вещественных элементов
- AddToStringList([0], [1]) - добавление произвольного элемента в коллекцию строковых элементов
- AddToDateList([0], [1]) - добавление произвольного элемента в коллекцию дат
- AddToBooleanList([0], [1]) - добавление произвольного элемента в коллекцию логических элементов
Добавление коллекции значений
- AddRangeToList([0], [1]) - добавление коллекции произвольных элементов в коллекцию произвольных элементов
- AddRangeToIntList([0], [1]) - добавление коллекции целочисленных элементов в коллекцию целочисленных элементов
- AddRangeToDoubleList([0], [1]) - добавление коллекции вещественных элементов в коллекцию вещественных элементов
- AddRangeToStringList([0], [1]) - добавление коллекции строковых элементов в коллекцию строковых элементов
- AddRangeToDateList([0], [1]) - добавление коллекции дат в коллекцию дат
- AddRangeToBooleanList([0], [1]) - добавление коллекции логических элементов в коллекцию логических элементов
Удаление единичных значений
- RemoveFromList([0], [1]) - исключение произвольного элемента из коллекции произвольных элементов
- RemoveFromIntList([0], [1]) - исключение целочисленного элемента из коллекции целочисленных элементов
- RemoveFromDoubleList([0], [1]) - исключение вещественного элемента из коллекции вещественных элементов
- RemoveFromStringList([0], [1]) - исключение строкового элемента из коллекции строковых элементов
- RemoveFromDateList([0], [1]) - исключение даты из коллекции дат
- RemoveFromBooleanList([0], [1]) - исключение логического элемента из коллекции логических элементов
Удаление коллекции значений
- RemoveRangeFromList([0], [1]) - исключение коллекции произвольных элементов из коллекции произвольных элементов
- RemoveRangeFromIntList([0], [1]) - исключение коллекции целочисленных элементов из коллекции целочисленных элементов
- RemoveRangeFromDoubleList([0], [1]) - исключение коллекции вещественных элементов из коллекции вещественных элементов
- RemoveRangeFromStringList([0], [1]) - исключение коллекции строковых элементов из коллекции строковых элементов
- RemoveRangeFromDateList([0], [1]) - исключение коллекции дат из коллекции дат
- RemoveRangeFromBooleanList([0], [1]) - исключение коллекции логических элементов из коллекции логических элементов
Поиск в коллекциях
- FindIndex([0], [1]) - поиск индекса элемента в коллекции. Первый операнд - коллекция, второй - значение которое ищем. Если значение не нашлось, вернется -1. Индексация начинается 0.
- Rank([0], [1], [2] = true) - поиск индекса в коллекции после сортировки. Комбинация функций FindIndex и SortList, сперва переданная коллекция из первого операнда сортируется по возрастанию или убыванию (третий операнд), а затем в результирующей коллекции ищется индекс значения из второго операнда.
- RankDouble([0], [1], [2] = true, [3] = 1E-9) - поиск индекса в коллекции вещественных значений после сортировки. Функция аналогична функции Rank, только использует вместо FindIndex функцию FindDoubleIndex, как следствие добавляется еще один опциональный операнд - точность при поиске (если значение не задано берется 1E-9).
- ValueOf([0], [1]) - получение значения элемента по его индексу в коллекции. Первый операнд - это коллекция, Второй операнд - это индекс элемента в коллекции, если необходимо получить значение последнего элемента, тогда можно указать в индексе "-1" - это интерпретируется расчетчиком как "длинна коллекции - 1", а "-2" = "длинна коллекции - 2" и тд...
SumIf()
При необходимости складывать значение массива с условием, то следует использовать функцию SumIf(<collection>, <compareValue>, [<sum_collection>]), где
- collection - коллекция значений
- compareValue - значение, которое является условием для сложения
- sum_collection - коллекция значений, которые будут просуммированы. Если этот параметр не указан, будут просуммированы ячейки из первой коллекции.
1 {
2 "expression": "SumIf(ToList([1]), '25')",
3 "operandValues": [
4 {
5 "id": 1,
6 "value":"25"
7 }
8 ]
9 }
Пример:
1 {
2 "expression": "SumIf([1], 2 )",
3 "operandValues": [
4 {
5 "id": 1,
6 "value": [0,1,2,2,30]
7 },
8 {"id":2,
9 "value":[3,4,5,6, 555]}
10 ]
11 }
На выходе получим значение 4, так как в коллекции 1 число 2 встретится на позиции 2, 3.
1 {
2 "expression": "SumIf([1], 2 , [2] )",
3 "operandValues": [
4 {
5 "id": 1,
6 "value": [0,1,2,2,30]
7 },
8 {"id":2,
9 "value":[3,4,5,6, 555]}
10 ]
11 }
На выходе получим значение 11, так как в коллекции 1 число 2 встретится на позиции 2, 3, а в коллекции 2 на этих позициях стоят числа 5, 6, которые просуммируются и вернутся.
CountIf() При необходимости посчитать количество вхождений значений в коллекцию следует использовать CountIf(<collection>, <compareValue>), где
- collection - коллекция значений
- compareValue - значение, которое является условием для сложения
1 {
2 "expression": "CountIf(ToList([1]), 'хо')",
3 "operandValues": [
4 {
5 "id": 1,
6 "value":"хо"
7 }
8 ]
9 }
SumIfExpression() При необходимости складывать значение массива с условием, то следует использовать функцию SumIfExpression(<collection>, <expression>, [<sum_collection>]), где
- collection - коллекция значений
- expression - выражение, которое является условием для сложения. Формат выражения: '[0] <условие сравнения> <значение>', где [0] - приходящее значение из массива
- sum_collection - коллекция значений, которые будут просуммированы. Если этот параметр не указан, будут просуммированы ячейки из первой коллекции.
1 {
2 "expression": "SumIfExpression(ToList([1]), '[0]>0')",
3 "operandValues": [
4 {
5 "id": 1,
6 "value":"2"
7 }
8 ]
9 }
CountIfExpression()
CountIfExpression(<collection>, <expression>), где
- collection - коллекция значений
- expression - выражение, которое является условием для сложения. Формат выражения: '[0] <условие сравнения> <значение>', где [0] - приходящее значение из массива
1 {
2 "expression": "CountIfExpression(ToList([1]), '[0]>0')",
3 "operandValues": [
4 {
5 "id": 1,
6 "value":"2"
7 }
8 ]
9 }
FilterIfExpression() Для того, чтобы вернуть коллекцию значений по выражению следует использовать функцию FilterIfExpression(<collection>, <expression>), где
- collection - коллекция значений
- expression - выражение, которое является условием для фильтрации. Формат выражения: '[0] <условие сравнения> <значение>', где [0] - приходящее значение из массива
1 {
2 "expression": "FilterIfExpression(ToList([1]), '[0]>0')",
3 "operandValues": [
4 {
5 "id": 1,
6 "value":"2"
7 }
8 ]
9 }
Flatten() Для того, чтобы объединить коллекцию коллекций в одну коллекцию следует использовать функцию Flatten(<collection>), где
- collection - коллекция коллекций
1 {
2 "expression": "Flatten([1])",
3 "returnFirstParameterValue": false,
4 "operands": [
5 {
6 "dictionaryId": 584,
7 "attribute": {
8 "discriminator": "OwnAttributeDefinitionDto",
9 "id": 2
10 },
11 "discriminator": "EntryExpressionByDictionaryRequest",
12 "id": 1,
13 "allowMultipleValues": true
14 }
15 ],
16 "id": 1,
17 "name": "Выражение",
18 "code": null
19 }
Пример выражения можно посмотреть здесь