これはcons
演算子そのものではありませんが、+
演算子を使用して、配列を "コンストラクタスタイル"の可変または不変配列に追加または前置することができます。連結された結果で新しい配列を構築します。 the Swift Language Guide - Collection Typesから
:
あなたが一緒に加算演算子と 互換性のある型を有する2つの既存のアレイを追加することによって、(+
)を新しい配列を作成することができ一緒
を二つの配列を追加することにより、アレイの作成。新しい配列の タイプは、あなたが一緒に追加2つの配列の種類から推測される:
...
すなわち、
let foo = [1, 2]
let bar = foo + [3] // [1, 2, 3], "cons(foo, 3)"
let baz = [-1, 0] + bar // [-1, 0, 1, 2, 3], "cons([-1, 0], bar)"
これがで実行されないことに注意してください、償却された一定時間は、我々は新しいメモリを割り当てる必要があるので、をコピーしてください。しかし、配列はSwiftの値型なので、不変配列の操作(新しい不変配列を作成するなど)が一定の時間内にどのように動作するかはわかりません。 (たとえ、時にはこれが遅れて実行されるかもしれない)。
したがって、上記の性能はをコピーすることによって、続いて既存の変更可能な1 に.append
/.appendContentsOf
を用い新しいアレイを構築する異なるべきではありません。前のステップは償却された一定時間(アレイスペースの事前割り振りの指数関数的な増加による)で実行されますが、後者は線形時間で実行されます。
[こんにちは!](http://stackoverflow.com/a/36635150/2547229)と回答ありがとうございます。私は、私が[線形時間 'スキャン'](http://stackoverflow.com/q/35160890/2547229)を望むなら、私はそれを受け入れなければならないと思う、私はそれを上に構築することはできません'reduce' :-) – Benjohn
@Benjohn確かに、それはまるで--- wrt複雑さ--- Swift(reduce、map)の機能面の多くは、純粋な古い命令的に実装されたアルゴリズム(例えば、他のスレッドの 'scan'関数)と競合するために少し複雑です。 Wr.現在のスレッド:スウィフト配列が償却された線形時間で真に非突然変異(すなわち、新しいものを作成)できるかどうかはわかりません。 )。 – dfri