С Swift 3, в соответствии с вашими потребностями и вкусами, вы можете выбрать один из пяти следующих способов слияния / слияния двух массивов.
Swift standard library
[Int]
универсального оператора [Int]
Стандартная библиотека Swift определяет универсальный оператор +(_:_:)
. +(_:_:)
имеет следующее объявление :
func +(lhs: RRC1, rhs: RRC2) -> RRC1
Создает новую коллекцию, объединяя элементы двух коллекций.
blockquote>] Следующий код игровой площадки показывает, как объединить два массива типа
[Int]
в новый массив, используя общий оператор+(_:_:)
:let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenArray = array1 + array2 print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
2. Добавление массива в другой массив с помощью метода
Array
append(contentsOf:)
Swift
Array
имеет методappend(contentsOf:)
.append(contentsOf:)
имеет следующее объявление :public mutating func append
(contentsOf newElements: S) where S : Sequence, S.Iterator.Element == Element)Добавляет элементы последовательности или коллекции в конец этой коллекции.
blockquote >Следующий код игровой площадки показывает, как добавить массив к другому массиву типа
[Int]
с использованием методаappend(contentsOf:)
:var array1 = [1, 2, 3] let array2 = [4, 5, 6] array1.append(contentsOf: array2) print(array1) // prints [1, 2, 3, 4, 5, 6]
3. Слияние двух массивов в новый массив с помощью метода
Sequence
flatMap(_:)
Swift предоставляет метод
flatMap(_:)
для всех типов, соответствующих протоколуSequence
(включаяArray
).flatMap(_:)
имеет следующее объявление :func flatMap
(_ transform: (Self.Iterator.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Iterator.Element] Возвращает массив, содержащий конкатенированные результаты вызова данного преобразования с каждым элементом этой последовательности.
blockquote>Следующий код игровой площадки показывает, как объединить два массива типа
[Int]
в новый массив с использованием методаflatMap(_:)
:let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenArray = [array1, array2].flatMap({ (element: [Int]) -> [Int] in return element }) print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
4. Объедините два массива в новый массив с помощью метода
Sequence
Sequence
Sequence
иArray
init(_:)
инициализатор. Swift предоставляет метод
joined()
для всех типов, соответствующихSequence
протокол (включаяArray
).joined()
имеет следующее объявление :func joined() -> FlattenSequence
Возвращает элементы этой последовательности последовательностей, конкатенированные.
blockquote>Кроме того, Swift
Array
имеет инициализаторinit(_:)
.init(_:)
имеет следующее объявление :init
(_ s: S)Создает массив, содержащий элементы последовательности.
blockquote>Поэтому , следующий код игровой площадки показывает, как объединить два массива типа
[Int]
в новый массив с использованием методаjoined()
иinit(_:)
initializer:let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenCollection = [array1, array2].joined() // type: FlattenBidirectionalCollection<[Array
]> let flattenArray = Array(flattenCollection) print(flattenArray) // prints [1, 2, 3, 4, 5, 6] 5. Слияние двух массивов в новый массив с помощью метода
Array
reduce(_:_:)
Swift
Array
имеет методreduce(_:_:)
.reduce(_:_:)
имеет следующее объявление :func reduce
(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result Возвращает результат вызова данного замыкающего замыкания с каждым элементом этой последовательности и накопительным значением.
blockquote>Следующий код игровой площадки показывает, как объединить два массива типа
[Int]
в новый массив с использованием методаreduce(_:_:)
:let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenArray = [array1, array2].reduce([], { (result: [Int], element: [Int]) -> [Int] in return result + element }) print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
Декларативное программирование состоит в том, когда Вы пишете свой код таким способом, которым это описывает то, что Вы хотите сделать, и не, как Вы хотите сделать это. Это оставляют до компилятора выяснить как.
Примерами языков декларативного программирования является SQL и Пролог.
Я объяснил бы его, поскольку DP является способом выразить
... и где существует вычитать механизм, обычно работающий с объединение алгоритм для нахождения целей.
Пара других примеров декларативного программирования:
Декларативное программирование хорошо, потому что оно может помочь , упрощают Вашу умственную модель * кода, и потому что это могло бы в конечном счете быть более масштабируемо.
, Например, скажем, у Вас есть функция, которая делает что-то к каждому элементу в массиве или списке. Традиционный код был бы похож на это:
foreach (object item in MyList)
{
DoSomething(item);
}
Никакое грандиозное предприятие там. Но что, если Вы используете более - декларативный синтаксис и вместо этого определяете DoSomething () как Действие? Тогда можно сказать это этот путь:
MyList.ForEach(DoSometing);
Это, конечно, более кратко. Но я уверен, что у Вас есть больше проблем, чем просто сохранение двух строк кода тут и там. Производительность, например. Старый путь, обрабатывая должен был быть сделан в последовательности. Что, если.ForEach () метод имел способ для Вас сигнализировать, что это могло обработать обработку параллельно, автоматически? Теперь внезапно Вы сделали свой код многопоточным очень безопасным способом и только изменили одну строку кода. И, на самом деле, существует расширение для.Net, который позволяет Вам сделать просто это.
Насколько я могу сказать, это начало использоваться описывать системы программирования как Пролог, потому что пролог (предположительно), об объявлении вещей абстрактным способом.
Это все больше означает очень мало, поскольку этому дали определение пользователи выше. Должно быть ясно, что существует залив между декларативным программированием Haskell, по сравнению с декларативным программированием HTML.
Описание к компьютеру, что Вы хотите, не, как сделать что-то.
вообразите страницу Excel. Со столбцами, заполненными с формулами для вычисления Вас налоговая декларация.
Вся логика сделана объявленная в ячейках, порядок вычисления, определяют самой формулой, а не процедурно.
, Который является видом того, о чем декларативное программирование - все. Вы объявляете пространство задач и решение, а не поток программы.
Пролог является единственным декларативным языком, у меня есть использование. Это требует другого вида размышления, но хорошо учиться, представить ли только Вас чему-то другому, чем типичный язык процедурного программирования.
Декларативное программирование является изображением, где императивное программирование является инструкциями для рисования того изображения.
Вы пишете в декларативном стиле, если Вы "Говорите его, что это", вместо того, чтобы описать шаги, которые компьютер должен сделать для получения туда, где Вы хотите его.
при использовании XML для данных разметки Вы используете декларативное программирование, потому что Вы говорите, что "Это - человек, который является днем рождения, и там является конкретным адресом".
Некоторые примеры того, где декларативное и императивное программирование объединено для большего эффекта:
Windows Presentation Foundation использует декларативный синтаксис XML для описания то, на что пользовательский интерфейс похож, и что отношения (привязка) между средствами управления и базовыми структурами данных.
Структурированные конфигурационные файлы используют декларативный синтаксис (в качестве простого как "key=value" пары) для идентификации то, что означают строка или значение данных.
HTML повышает текст с тегами, которые описывают, какую роль каждая часть текста имеет относительно целого документа.
Другие ответы уже делают фантастическое задание, объясняющее, каково декларативное программирование, таким образом, я просто собираюсь обеспечить некоторые примеры того, почему это могло бы быть полезно.
Декларативные Программы независимы от контекста . Поскольку они только объявляют, какова конечная цель, но не посредник ступает для достижения той цели, та же программа может использоваться в различных контекстах. Это трудно относится обязательные программы , потому что они часто зависят от контекста (например, скрытое состояние).
Берут yacc
в качестве примера. Это - парсер-генератор иначе. компилятор компилятора, внешний декларативный DSL для описания грамматики языка, так, чтобы синтаксический анализатор для того языка мог автоматически быть сгенерирован из описания. Из-за его независимости контекста можно сделать много разных вещей с такой грамматикой:
yacc
) И намного больше …
, поскольку Вы не предписываете компьютер, который ступает для взятия и в том, какой порядок, это может перестроить программу намного более свободно, возможно, даже, выполняют некоторые задачи параллельно. Хорошим примером является планировщик запроса и оптимизатор запросов для базы данных SQL. Большинство баз данных SQL позволяет Вам отображать запрос, что они на самом деле выполнение по сравнению с запросом, который Вы попросили их выполнять. Часто, те запросы взгляд ничто друг как друг. Планировщик запроса берет вещи во внимание, что Вы даже не мечтали бы о: вращательная задержка подложки диска, например, или того, что некоторое совершенно другое приложение для совершенно другого пользователя просто выполнило подобный запрос и таблицу, к которой Вы присоединяетесь и что Вы упорно работали так, чтобы не загружаться, уже находится в памяти так или иначе.
здесь существует интересный компромисс: машина должна работать усерднее для выяснения , как , чтобы сделать что-то, чем он был бы на императивном языке, но когда это делает , понимают его, это имеет намного больше свободы и намного больше информации для этапа оптимизации.
Это - метод программирования основанного вокруг описания , что что-то должно сделать или быть вместо того, чтобы описать , как это должно работать.
, Другими словами, Вы не пишете алгоритмы, сделанные из выражений, Вы просто расположение, как Вы хотите вещи быть. Двумя хорошими примерами является HTML и WPF.
статья This Wikipedia является хорошим обзором: http://en.wikipedia.org/wiki/Declarative_programming
Это может показаться странным, но я бы добавил Excel (или любую другую электронную таблицу) в список декларативных систем. Хорошим примером этого является здесь .