Последовательность
Стд::Последовательность<ТипЭлемента>
Объект предоставляет возможность для потоковой обработки данных. Некоторые методы помечены как терминальные. Это значит что такой метод закрывает последовательность и дальнейшие действия с последовательностью приведут к ошибке.
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, Имя: Иван}]
Преобразовать
Преобразовать<ТипРезультата>(
Функция: (ТипЭлемента)->ТипРезультата,
ПропуститьНеопределено: Булево = Истина
): Последовательность<ТипРезультата>Применяет функцию к каждому элементу и возвращает новую последовательность с результатами.