Как эффективно объединить два уже отсортированных массива в один отсортированный массив в M $ Flow - PullRequest
0 голосов
/ 13 июля 2020

Microsoft Flow не поддерживает никаких функций сортировки для массивов или списков.

Для моих проблем я могу использовать функцию сортировки в запросе ODATA, чтобы некоторые данные предварительно отсортированы базами данных, к которым я обращаюсь. В моем случае я хочу иметь список всех дат начала и окончания из календаря sharepoint в одном массиве.

Я могу вывести все даты, отсортированные по дате начала, и я могу вывести все даты, отсортированные по дату окончания в отдельные массивы. Теперь у меня есть два отсортированных массива, которые я хочу объединить в один массив.

Возможностей итерации по массиву очень мало. Но у задачи есть некоторые свойства, которые могут облегчить проблему.

  • Два массива,
  • оба предварительно отсортированы по тому же свойству, что и желаемые окончательные массивы.
  • того же размера .

Возможно, мне не хватает какой-то функции ODATA-запроса или есть простой обходной путь. Я бы предпочел не использовать REST-api, возиться с JSON или вручную, но если есть действительно элегантное решение, я не откажусь от него.

1 Ответ

0 голосов
/ 13 июля 2020

У меня есть решение, но я не думаю, что оно хорошее.

Prerequesites - это два уже отсортированных массива и два дополнительных массива. Назовем два отсортированных массива, которые я извлек из массива списка sharepoint A и B.

И давайте назовем дополнительные массивы массивом S1 и S2.

  1. Затем я настроил foreach -l oop в массиве B.
  2. Внутри этого l oop Я фильтрую массив A для всех элементов, меньших или равных текущему элементу массива B.
  3. Выходные данные фильтра операция сохраняется в массиве S1.
  4. текущий элемент массива B добавляется в массив S1.
  5. Снова фильтруйте массив A для всех элементов, но на этот раз больше, чем текущий элемент массива B .
  6. сохранить результат операции фильтрации в массиве S2.
  7. сделать объединение из S1 и S2.
  8. сохранить выходные данные выражения объединения в массив A.

Поскольку каждый элемент массива A должен быть скопирован n раз для массива из n элементов, усилия по обработке двух массивов из n элементов не совсем оптимальны, особенно если учесть, что оба массива уже отсортированы в заранее.

  • n² сравнения
  • 2n² + n операций копирования (без учета несовершенства реализации потока)

Если бы я реализовал полную сортировку с нуля, он работал бы лучше, я думаю, но я также думаю, что должны быть другие средства для объединения двух предварительно отсортированных массивов совместимого содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...