std.algorithm

Этот пакет реализует типовые алгоритмы, ориентированные на обработку последовательностей. Последовательности, обрабатываемые этими функциями, определяются интерфейсами, основанными на диапазонах. Смотрите также Документацию по диапазонам и Урок о диапазонах.
Алгоритмы распределены по следующим подмодулям:
Категория Подмодуль Функции
Поиск std.algorithm.searching all  any  balancedParens  boyerMooreFinder  canFind  commonPrefix  count  countUntil  endsWith  find  findAdjacent  findAmong  findSkip  findSplit  findSplitAfter  findSplitBefore  minCount  maxCount  minElement  maxElement  minPos  maxPos  skipOver  startsWith  until 
Сравнение std.algorithm.comparison among  castSwitch  clamp  cmp  either  equal  isPermutation  isSameLength  levenshteinDistance  levenshteinDistanceAndPath  max  min  mismatch  predSwitch 
Итерации
(перебор в цикле)
std.algorithm.iteration cache  cacheBidirectional  chunkBy  cumulativeFold  each  filter  filterBidirectional  fold  group  joiner  map  permutations  reduce  splitter  sum  uniq 
Сортировка std.algorithm.sorting completeSort  isPartitioned  isSorted  isStrictlyMonotonic  ordered  strictlyOrdered  makeIndex  merge  multiSort  nextEvenPermutation  nextPermutation  partialSort  partition  partition3  schwartzSort  sort  topN  topNCopy  topNIndex 
Set operations std.algorithm.setops cartesianProduct  largestPartialIntersection  largestPartialIntersectionWeighted  nWayUnion  setDifference  setIntersection  setSymmetricDifference 
Изменения std.algorithm.mutation bringToFront  copy  fill  initializeAll  move  moveAll  moveSome  remove  reverse  strip  stripLeft  stripRight  swap  swapRanges  uninitializedFill 
Множество функций в этом пакете параметризованы предикатом. Предикатом может быть любой подходящий вызываемый тип (функция, делегат, функтор, или lambda), или строка времени компиляции. Строка может состоять из любого легального D-выражения, которое использует символ a (для одноаргументных функций) или символы a и b (для двухаргументных функций). Эти имена НЕ пересекаются с другими идентификаторами-омонимами в коде пользователя, поскольку они применяются в другом контексте. По умолчанию для всех двухаргументных предикатов сравнения используется "a == b" для неупорядоченных операций, и "a < b" для упорядоченных операций.

Пример:

int[] a = ...;
static bool greater(int a, int b)
{
    return a > b;
}
sort!greater(a);           // предикат как псевдоним
sort!((a, b) => a > b)(a); // предикат как lambda.
sort!"a > b"(a);           // предикат как строка
                           // (нет никакой неоднозначности с именем массива)
sort(a);                   // нет предиката, подразумевается "a < b"

Лицензия:
Boost License 1.0.
Авторы:
Andrei Alexandrescu

Исходный код: std/algorithm/package.d