Платформа 3V/Выражение/Расчет выражений/Работа с коллекциями: различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
 
(не показано 5 промежуточных версий 2 участников)
Строка 46: Строка 46:
 
* 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" и тд...
 
* 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" и тд...
Реализовано в версии 0.40


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 }


Реализовано в версии 0.42

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 }

Пример выражения можно посмотреть здесь