Последовательность
Стд::Последовательность<ТипЭлемента>
Объект предоставляет возможность для потоковой обработки данных. Некоторые методы помечены как терминальные. Это значит что такой метод закрывает последовательность и дальнейшие действия с последовательностью приведут к ошибке.
Example
знч Числа = [1, 3, 5, 10].КакПоследовательность()
знч Макс = Числа.Максимум()
// Здесь вызов метода "Минимум" приведет к ошибке
// последовательность "Числа" уже закрыта ранее при вызове терминального метода "Максимум"
знч Мин = Числа.Минимум()
На сервере, в отличие от клиента, никаких реальных действий выполнено не будет, пока не будет вызван терминальный метод.
Example
/* Выполняется на сервере */
знч Числа = [1, 3, 5, 10]
знч ПоследовательностьЧисел = Числа.КакПоследовательность()
// Вызван не терминальный метод "Фильтровать", никаких реальных действий выполнено не будет
ПоследовательностьЧисел = ПоследовательностьЧисел.Фильтровать(А -> А > 4)
Числа.Добавить(-1)
Числа.Добавить(15)
// Вызван терминальный метод "ВМассив", фильтрация элементов будет тут
знч Результат = ПоследовательностьЧисел.ВМассив()
// [5, 10, 15]
Example
/* Выполняется на клиенте */
знч Числа = [1, 3, 5, 10]
знч ПоследовательностьЧисел = Числа.КакПоследовательность()
// Фильтрация будет выполнена здесь
ПоследовательностьЧисел = ПоследовательностьЧисел.Фильтровать(А -> А > 4)
// Добавление новых чисел не повлияет на результат, так как фильтрация уже выполнена
Числа.Добавить(-1)
Числа.Добавить(15)
знч Результат = ПоследовательностьЧисел.ВМассив()
// [5, 10]
- ItemType - Тип элементов в последовательности.
Сравнение ссылочное
Иерархия типа
Базовые типы: Объект
Методы
ВМассив
ВМассив(): Массив<ТипЭлемента>
Примеры
знч Числа: Последовательность<Число> = ...
знч МассивЧисел = Числа.ВМассив() // Массив<Число>
ВСоответствие
ВСоответствие<ТипКлюча, ТипЗначения>(
ИзвлекательКлюча: (ТипЭлемента)->ТипКлюча,
ИзвлекательЗначения: (ТипЭлемента)->ТипЗначения
): Соответствие<ТипКлюча, ТипЗначения>
ТипЗначения: тип значения.
Преобразует Последовательность в Соответствие, используя заданные функции для вычисления ключа и значения. Терминальный метод.
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Имя: Петя}, {Ид: 5, Имя: Вася}]
знч ИдИмя: Соответствие<Число, Строка> = Сотрудники.ВСоответствие(Элемент -> Элемент.Ид, Элемент -> Элемент.Имя)
// { 13 : "Петя",
// 5 : "Вася"}
ВСоответствиеСКлючами
ВСоответствиеСКлючами<ТипКлюча>(ИзвлекательКлюча: (ТипЭлемента)->ТипКлюча): Соответствие<ТипКлюча, ТипЭлемента>
Преобразует Последовательность в Соответствие, используя заданную функцию для вычисления ключа и элемент последовательности в качес тве значения. Терминальный метод.
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Имя: Петя, Возраст: 24},
// {Ид: 5, Имя: Вася, Возраст: 30}]
знч СотрудникПоИд = Сотрудники.ВСоответствиеСКлючами(Элемент -> Элемент.Ид) // Соответствие<Число, Сотрудник>
// {13 : {Ид: 13, Имя: Петя, Возраст: 24},
// 5 : {Ид: 5, Имя: Вася, Возраст: 30}}
ВСоответствиеСоЗначениями
ВСоответствиеСоЗначениями<ТипЗначения>(ИзвлекательЗначения: (ТипЭлемента)->ТипЗначения): Соответствие<ТипЭлемента, ТипЗначения>
Преобразует Последовательность в Соответствие, используя заданную функцию для вычисления значения и элемент последовательности в качестве ключа. Терминальный метод.
Примеры
знч Идентификаторы: Последовательность<Число> = [13, 5].КакПоследовательность()
знч СотрудникПоИд = Идентификаторы.ВСоответствиеСоЗначениями(Ид -> ПолучитьСотрудникаПоИд(Ид)) // Соответствие<Число, Сотрудник>
// {13 : {Ид: 13, Имя: Петя, Возраст: 24},
// 5 : {Ид: 5, Имя: Вася, Возраст: 30}}
ВоМножество
ВоМножество(): Множество<ТипЭлемента>
Примеры
знч Числа = [1, 3, 5, 10, 12, 1, 3, 5].КакПоследовательность()
знч МножествоЧисел = Числа.ВоМножество() // {1, 3, 5, 10, 12}
ВсеСоответствуют
Возвращает Истина, если все элементы Последовательности удовлетворяют условию в предикате. На сервере это операция сокращенного вычисления. Это значит, что вызванные до операции, могут быть вызваны не для каждого элемента. Терминальный метод.Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Имя: Петя, Отдел: Администрация},
// {Ид: 5, Имя: Вася, Отдел: Администрация},
// {Ид: 6, Имя: Иван, Отдел: Разработка}]
знч ВсеИзРазработки: Булево = Сотрудники.ВсеСоответствуют(Элемент -> Элемент.Отдел == Разработка) // Ложь
// пример сокращенного вычисления
знч Числа = [1, 2, 3, 4, 5]
знч КвадратыЧисел = <Число>[]
знч ВсеЧетные = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).ВсеСоответствуют(а -> а % 2 == 0) // Ложь
// КвадратыЧисел = [1]
ГруппироватьПо
ГруппироватьПо<ТипКлюча>(Извлекатель: (ТипЭлемента)->ТипКлюча): Последовательность<КлючИЗначение<ТипКлюча, Массив<ТипЭлемента>>>
Группирует элементы в соответствии с заданной функцией вычисления ключа. Элементы с одинаковым ключом объединяются в Массив. Терминальный метод.
Извлекатель
- функция, применяющаяся к каждому элементу, возвращающая характеристику, по которой будут группироваться элементы.
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Имя: Петя, Отдел: Администрация},
// {Ид: 5, Имя: Вася, Отдел: Администрация},
// {Ид: 6, Имя: Иван, Отдел: Разработка}]
знч ОтделыИСотрудники: Последовательность<КлючИЗначение<Строка, Массив<Сотрудник>>> = Сотрудники.ГруппироватьПо(Элемент -> Элемент.Отдел)
// [
// Администрация: [{Ид: 13, Имя: Петя, Отдел: Администрация},
// {Ид: 5, Имя: Вася, Отдел: Администрация}],
// Разработка: [{Ид: 6, Имя: Иван, Отдел: Разработка}]
// ]
ДляКаждого
ДляКаждого(Действие: (ТипЭлемента)->ничто): Последовательность<ТипЭлемента>
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Имя: Петя}, {Ид: 5, Имя: Вася}]
Сотрудники.ДляКаждого(Элемент -> Консоль.Записать(Элемент.Ид + " - " + Элемент.Имя))
// 13 - Петя
// 5 - Вася
// В примере ниже действие 'а -> КвадратыЧисел.Добавить(а * а)'
// на сервере будет вызвано только для первого элемента
знч Числа = [1, 3, 5]
знч КвадратыЧисел = <Число>[]
знч Первое = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).ПервыйИлиУмолчание() // 1
// КвадратыЧисел = [1]
Единственный
Единственный(): ТипЭлемента
Исключения
ИсключениеНедопустимоеСостояние - если нет элементов или элементов больше одного.
ЕдинственныйИлиНеопределено
ЕдинственныйИлиНеопределено(): ТипЭлемента?
Неопределено
.
Терминальный метод.
Исключения
ИсключениеНедопустимоеСостояние - если элементов больше одного.
Прошлые имена: ЕдинственныйИлиУмолчание
ЕдинственныйИлиУмолчание
ЕдинственныйИлиУмолчание(Умолчание: ТипЭлемента): ТипЭлемента
ЕдинственныйИлиУмолчание<ТипУмолчания>(ВычислительУмолчания: ()->ТипЭлемента|ТипУмолчани я): ТипЭлемента|ТипУмолчания
Возвращает единственный содержащийся элемент или значение Умолчание
, если элементов нет.
Терминальный метод.
Исключения
ИсключениеНедопустимоеСостояние - если элементов больше одного.
ЕдинственныйИлиУмолчание
ЕдинственныйИлиУмолчание<ТипУмолчания>(ВычислительУмолчания: ()->ТипЭлемента|ТипУмолчания): ТипЭлемента|ТипУмолчания
Перегрузка:
ЕдинственныйИлиУмолчание(Умолчание: ТипЭлемента): ТипЭлемента
Возвращает единственный содержащийся элемент или значение, вычисленное с помощью ВычислительУмолчания
, если элементов нет.
Терминальный метод.
Исключения
ИсключениеНедопустимоеСостояние - если элементов больше одного.
ЕстьСоответствия
Возвращает Истина, если хотя бы один из элементов Последовательности удовлетворяет условию в предикате. На сервере это операция сокращенного вычисления. Это значит, что вызванные до операции, могут быть вызваны не для каждого элемента. Терминальный метод.Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Имя: Петя, Отдел: Администрация},
// {Ид: 5, Имя: Вася, Отдел: Администрация},
// {Ид: 6, Имя: Иван, Отдел: Разработка}]
знч КтоТоИзАд министрации: Булево = Сотрудники.ЕстьСоответствия(Элемент -> Элемент.Отдел == Администрация) // Истина
// пример сокращенного вычисления
знч Числа = [1, 2, 3, 4, 5]
знч КвадратыЧисел = <Число>[]
знч ЕстьЧетные = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).ЕстьСоответствия(а -> а % 2 == 0) // Истина
// КвадратыЧисел = [1, 4]
КакОбходимое
КакОбходимое(): Обходимое<ТипЭлемента>
Максимум
<ItemType это Сравнимое<ТипЭлемента>> Максимум(): ТипЭлемента
Исключения
ИсключениеНедопустимоеСостояние - если нет элементов.
Примеры
знч Числа = [1, 3, 5, 10, 12].КакПоследовательность()
знч Максимум: Число = Числа.Максимум() // 12
МаксимумПо
МаксимумПо(Извлекатель: (ТипЭлемента)->Сравнимое<неизвестно>): ТипЭлемента
Исключения
ИсключениеНедопустимоеСостояние - если нет элементов.
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Имя: Петя, Возраст: 25},
// {Имя: Вася, Возраст: 24},
// {Имя: Иван, Возраст: 30}]
знч СтаршийСотрудник: Сотрудник = Сотрудники.МаксимумПо(Элемент -> Элемент.Возраст)
// {Имя: Иван, Возраст: 30}
Минимум
<ItemType это Сравнимое<ТипЭлемента>> Минимум(): ТипЭлемента
Исключения
ИсключениеНедопустимоеСостояние - если нет элементов.
Примеры
знч Числа = [1, 3, 5, 10, 12].КакПоследовательность()
знч Минимум: Число = Числа.Минимум() // 1
МинимумПо
МинимумПо(Извлекатель: (ТипЭлемента)->Сравнимое<неизвестно>): ТипЭлемента
Исключения
ИсключениеНедопустимоеСостояние - если нет элементов.
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Имя: Петя, Возраст: 25},
// {Имя: Вася, Возраст: 24},
// {Имя: Иван, Возраст: 30}]
знч МладшийСотрудник: Сотрудник = Сотрудники.МинимумПо(Элемент -> Элемент.Возраст)
// {Имя: Вася, Возраст: 24}
НетСоответствий
Возвращает Истина, если ни один из элементов Последовательности не удовлетворяет условию в предикате. На сервере это операция сокращенного вычисления. Это значит, что вызванные до операции, могут быть вызваны не для каждого элемента. Терминальный метод.Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Имя: Петя, Отдел: Администрация},
// {Ид: 5, Имя: Вася, Отдел: Администрация},
// {Ид: 6, Имя: Иван, Отдел: Разработка}]
знч НиктоИзБухгалтерии: Булево = Сотрудники.НетСоответствий(Элемент -> Элемент.Отдел == Бухгалтерия) // Истина
// пример сокращенного вычисления
знч Числа = [1, 2, 3, 4, 5]
знч КвадратыЧисел = <Число>[]
знч НетЧетных = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).НетСоответствий(а -> а % 2 == 0) // Ложь
// КвадратыЧисел = [1, 4]
Объединить
@ПроверятьИспользованиеЗначения
Объединить(Последовательность: Последовательность<ТипЭлемента>): Последовательность<ТипЭлемента>
Последовательность
и возвращает новую последовательность.
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Имя: Петя, Возраст: 25},
// {Имя: Вася, Возраст: 24}]
знч Сотрудники2: Последовательность<Сотрудник> = ...
// [{Имя: Иван, Возраст: 26},
// {Имя: Андрей, Возраст: 27}]
знч ВсеСотрудники: Последовательность<Сотрудник> = Сотрудники.Объединить(Сотрудники2)
// [{Имя: Петя, Возраст: 25},
// {Имя: Вася, Возраст: 24},
// {Имя: Иван, Возраст: 26},
// {Имя: Андрей, Возраст: 27}]
Ограничить
Ограничить(Количество: Число): Последовательность<ТипЭлемента>
Исключения
ИсключениеНедопустимыйАргумент - если Количество
<= 0.
Примеры
знч Числа = [1, 3, 5, 10, 12, 15, 20]
знч Числа1 = Числа.КакПоследовательность().Ограничить(3).ВМассив() //[1, 3, 5]
// пример сокращенного вычисления
знч Числа2 = [1, 3, 5, 10, 12, 15, 20]
знч КвадратыЧисел = <Число>[]
знч СокращенныйМассив = Числа2.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).Ограничить(3).ВМассив()
// КвадратыЧисел = [1, 9, 25]
Первый
Первый(): ТипЭлемента
Исключения
ИсключениеНедопустимоеСостояние - если элементов нет.
ПервыйИлиНеопределено
ПервыйИлиНеопределено(): ТипЭлемента?
Неопределено
, если элементов нет.
На сервере это операция сокращенного вычисления.
Это значит, что вызванные до операции, могут быть вызваны не для каждого элемента.
Терминальный метод.
Примеры
знч Числа = [1, 3, 5, 10, 12, 15, 20]
знч Первый = Числа.КакПоследовательность().ПервыйИлиУмолчание() // 1
// пример сокращенного вычисления
знч КвадратыЧисел = <Число>[]
знч Первый1 = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).ПервыйИлиУмолчание() // 1
// КвадратыЧисел = [1]
Прошлые имена: ПервыйИлиУмолчание
ПервыйИлиУмолчание
ПервыйИлиУмолчание(Умолчание: ТипЭлемента): ТипЭлемента
ПервыйИлиУмолчание<ТипУмолчания>(ВычислительУмолчания: ()->ТипЭлемента|ТипУмолчания): ТипЭлемента|ТипУмолчания
Возвращает первый элемент или значение Умолчание
, если элементов нет.
На сервере это операция сокращенного вычисления.
Это значит, что вызванные до операции, могут быть вызваны не для каждого элемента.
Терминальный метод.
Примеры
знч Числа = [1, 3, 5, 10, 12, 15, 20]
знч Первый = Числа.КакПоследовательность().ПервыйИлиУмолчание(0) // 1
// пример сокращенного вычисления
знч КвадратыЧисел = <Число>[]
знч Первый1 = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).ПервыйИлиУмолчание(0) // 1
// КвадратыЧисел = [1]
ПервыйИлиУмолчание
ПервыйИлиУмолчание<ТипУмолчания>(ВычислительУмолчания: ()->ТипЭлемента|ТипУмолчания): ТипЭлемента|ТипУмолчания
Перегрузка:
ПервыйИлиУмолчание(Умолчание: ТипЭлемента): ТипЭлемента
Возвращает первый элемент или значение, вычисленное с помощью ВычислительУмолчания
, если элементов нет.
На сервере это операция сокращенного вычисления.
Это значит, что вызванные до операции, могут быть вызваны не для каждого элемента.
Терминальный метод.
Примеры
знч Числа = [1, 3, 5, 10, 12, 15, 20]
знч Первый = Числа.КакПоследовательность().ПервыйИлиУмолчание(() -> 0) // 1
// пример сокращенного вычисления
знч КвадратыЧисел = <Число>[]
знч Первый1 = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Доба вить(а * а)).ПервыйИлиУмолчание(() -> 0) // 1
// КвадратыЧисел = [1]
ПосчитатьРазмер
ПосчитатьРазмер(): Число
Примеры
знч Числа = [1, 3, 5, 10]
знч Размер = Числа.КакПоследовательность().ПосчитатьРазмер() // 4
// вызов ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)) будет опущен
// так как не влияет на количество элементов в последовательности
знч КвадратыЧисел = <Число>[]
знч Размер1 = Числа.КакПоследовательность().ДляКаждого(а -> КвадратыЧисел.Добавить(а * а)).ПосчитатьРазмер() // 4
// КвадратыЧисел = []
ПотомСортироватьПо
ПотомСортироватьПо(
Извлекатель: (ТипЭлемента)->С равнимое<неизвестно>,
Направление: НаправлениеСортировки = НаправлениеСортировки.ПоВозрастанию
): Последовательность<ТипЭлемента>
Извлекатель
для сравнения элементов.
Извлекатель
- функция, применяющаяся к каждому элементу, возвращающая характеристику, которая непосредственно будет сравниваться с характеристиками остальных значений для упорядочивания.
Например для структуры извлекатель может возвращать свойство, по которому сравниваются структуры.
Примеры
знч Сотрудники: Последовательность<Сотрудник> = ...
// [{Ид: 13, Возраст: 31, Имя: Петя},
// {Ид: 18, Возраст: 42, Имя: Иван},
// {Ид: 5, Возраст: 42, Имя: Вася}]
знч СотрудникиПоИд = Сотрудники.СортироватьПо(Элемент -> Элемент.Возраст).ПотомСортироватьПо(Элемент -> Элемент.Ид)
// [{Ид: 13, Возраст: 31, Имя: Петя},
// {Ид: 5, Возраст: 42, Имя: Вася},
// {Ид: 18, Возраст: 42, Имя: Иван}]
Преобразовать
Преобразовать<ТипРезультата>(
Функция: (ТипЭлемента)->ТипРезультата,
ПропуститьНеопределено: Булево = Истина
): Последовательность<ТипРезультата>
Применяет функцию к каждому элементу и возвращает новую последовательность с результатами.