Swiftで要素を配列に追加する


340

たとえば、配列があるとします。

var myArray = ["Steve", "Bill", "Linus", "Bret"]

そして、後で、配列を取得するために、配列の最後に要素をプッシュ/追加したいと思います。

["Steve", "Bill", "Linus", "Bret", "Tim"]

どの方法を使用すればよいですか?

そして、配列のに要素を追加したい場合はどうでしょうか?一定の時間シフトはありますか?


95
Steve Jobs、Bill Gates、Linus Torvalds、でもBretって誰?-私は知っておくべきだと感じています(そして、私が見つけたら自分を蹴るでしょう!)
Jimmery

23
ブレットビクター?worrydream.com
onekiloparsec

19
ブレットビクターは正しいです。彼の作品は、スウィフトの一部にインスピレーションを与えたと言われています
Fela Winkelmolen

3
添え字を使用して要素を新しいインデックスに追加することはできません。添え字は、値の更新または既存のインデックスからの読み取りにのみ使用されます。だから、あなたがlet array = [Int]()言うarray[0] = 42ことができないなら、それは範囲外エラーのインデックスを与えるでしょう。使用する必要がありますarray.append(42)。なぜ下付きできないのですか?あなたが行うことができない同じ理由letters[3] = dのために let letters = [a,b,c]。3番目のインデックスは、値の前のarray [0]と同様に存在しません!
ハニー

4
これを行う方法を彼に教えないでください。ティムはこのアレイで許可されるべきではありません、それは他の人への侮辱です...
Otziii

回答:


604

以下のようスイフト3/4/5次のように、これが行われます。

配列の最後に新しい要素を追加します。

anArray.append("This String")

配列の最後に別の配列を追加します。

anArray += ["Moar", "Strings"]
anArray.append(contentsOf: ["Moar", "Strings"])

新しい要素を配列に挿入します。

anArray.insert("This String", at: 0)

別の配列の内容を配列に挿入する。

anArray.insert(contentsOf: ["Moar", "Strings"], at: 0)

詳細については、110ページから始まる「The Swift Programming Language」の「Collection Types」の章を参照してください。


2
すばらしい答えです。Appleがこれを実装した方法の不一致は、いらいらさせるものです。おそらく、anArray + = "Foo"anArray + = ["Foo"]と同じことをするでしょう。個人的には、混乱を避けるために後者の構文のみを使用します。
original_username

11
anArray + = "Foo"はxCode 6ベータ5以降は機能しません
Amitay

配列の作成と入力のためのメソッドと関数のリストも作成できますか?:D

1
実行時に失敗しています。配列に既に挿入しようとしている要素があるので、そうではありません。私の回避策は、挿入しようとしている要素で新しい配列を作成し、元の配列からすべての要素を追加することです。これは、他の場所での保持の問題の結果であることを確信してください。これらのオブジェクトは、元の配列スポットに残っている限り、何とかして問題ありませんが、iOSが(挿入の結果として)移動しようとすると、クラッシュします。または、これは奇妙なSwift / IB問題です。
MusiGenesis 2015

1
spliceinsertContentsOfSwift 2でに名前を変更
Almas Sapargali 2015年

21

必要に応じて、変数やオブジェクトを渡すこともできます。

var str1:String = "John"
var str2:String = "Bob"

var myArray = ["Steve", "Bill", "Linus", "Bret"]

//add to the end of the array with append
myArray.append(str1)
myArray.append(str2)

それらを前面に追加するには:

//use 'insert' instead of append
myArray.insert(str1, atIndex:0)
myArray.insert(str2, atIndex:0)

//Swift 3
myArray.insert(str1, at: 0)
myArray.insert(str2, at: 0)

他の人がすでに述べたように、xCode 6.1以降では '+ ='を使用できなくなりました


2
意味があり、.prepend()機能がないため、先頭に挿入することは良いアプローチのようです
Atticus

1
+ =は引き続き使用できますが、単一の要素には使用できません。
Leo Dabus 2014年

17

最後に追加するには、+=演算子を使用します。

myArray += ["Craig"]
myArray += ["Jony", "Eddy"]

その演算子は通常、append(contentsOf:)メソッドと同等です。(そして、本当に古いSwiftバージョンでは、同じ要素タイプの他のコレクションだけでなく、単一の要素を追加することができました。)

insert(_:at:)インデックスに挿入するためのものもあります。

たとえば、最初に挿入するための便利な関数が必要な場合はArray拡張子を付けてクラスに追加できます。


場合myArrayタイプのものでありArray、その後、最初の行が正しくありません。+=両方の場合はオペレータにのみ使用することができmyArray、右オペランドがタイプですArray
Bart Jacobs

1
私がこの回答を投稿したときは正解でしたが、その後言語が変更されました。回答を更新しました。
rickster

それと同等である+=と言うのappendは正しくありませんが、前者は一時的な配列の作成を含み、オペレーター関数がそれを消費するとすぐに破棄されます。
クリスティク

10

+ =および+演算子を使用します。

extension Array {

}

func += <V> (inout left: [V], right: V) {
    left.append(right)
}

func + <V>(left: Array<V>, right: V) -> Array<V>
{
    var map = Array<V>()
    for (v) in left {
        map.append(v)
    }

    map.append(right)

    return map
}

次に使用します:

var list = [AnyObject]()
list += "hello" 
list += ["hello", "world!"]
var list2 = list + "anything"

2番目の関数では、左側の配列を反復処理する必要はありません。実行してvar copy = leftから追加するcopy.append(right)だけで十分です。Swiftでは、配列は参照型ではなく値型です。
Natan R.

4

最初の位置でアイテムを失うことなく配列の先頭に挿入したい場合は、ここに小さな拡張があります

extension Array{
    mutating func appendAtBeginning(newItem : Element){
        let copy = self
        self = []
        self.append(newItem)
        self.appendContentsOf(copy)
    }
}

エラー:タイプ 'Array <Element>'の値にメンバー 'appendContentsOf'がありません
Dani Kemper

3

Swift 4.1およびXcode 9.4.1の場合

オブジェクトを配列に追加するには、基本的に2つの方法があります

let stringOne = "One"
let strigTwo = "Two"
let stringThree = "Three"
var array:[String] = []//If your array is string type

タイプ1)

//To append elements at the end
array.append(stringOne)
array.append(stringThree)

タイプ2)

//To add elements at specific index
array.insert(strigTwo, at: 1)

2つのアレイを追加する場合

var array1 = [1,2,3,4,5]
let array2 = [6,7,8,9]

let array3 = array1+array2
print(array3)
array1.append(contentsOf: array2)
print(array1)

2

Swiftプログラミング言語の143ページから:

配列のappendメソッドを呼び出すことで、配列の最後に新しい項目を追加できます

または、追加の代入演算子(+ =)を使用して、配列の最後に新しい項目を追加します

抜粋:Apple Inc.「The Swift Programming Language」iBooks。https://itun.es/us/jEUH0.l


2

提案appendするソリューションに追加するには、これが多くの場合、償却定時間操作であることを知っておくと便利です。

複雑さ:自己のストレージが別のライブアレイと共有されていない限り、償却されたO(1)。自分がブリッジされたNSArrayをラップしない場合はO(count)。それ以外の場合、効率は不定です。

consSwiftのlike演算子を探しています。元の配列を変更せずに、要素が最後に付加された新しい不変の配列を一定の時間で返す必要があります。これを行う標準関数はまだ見つかりません。見つけたら報告することを忘れないようにしよう!


1

あなたは使うことができます

Myarray.insert("Data #\(index)", atIndex: index)

1

一意のオブジェクトを追加する場合は、配列構造体を展開できます

extension Array where Element: Equatable {
    mutating func appendUniqueObject(object: Generator.Element) {
        if contains(object) == false {
            append(object)
        }
    }
}

1

配列がNSArrayの場合、次のように、adding関数を使用して配列の最後にオブジェクトを追加できます。

Swift 4.2

var myArray: NSArray = []
let firstElement: String = "First element"
let secondElement: String = "Second element"

// Process to add the elements to the array
myArray.adding(firstElement)
myArray.adding(secondElement)

結果

print(myArray) 
// ["First element", "Second element"]

これは非常に簡単な方法です。


1

スウィフト4.2では: あなたは使用することができます

myArray.append("Tim") //To add "Tim" into array

または

myArray.insert("Tim", at: 0) //Change 0 with specific location 

0

例:student = ["Ben"、 "Ivy"、 "Jordell"]

1)配列の最後に単一の要素を追加するには、append(_ :)を使用します

students.append(\ "Maxime" )

2)別の配列または任意の種類のシーケンスをappend(contentsOf :)メソッドに渡して、複数の要素を同時に追加します

students.append(contentsOf: ["Shakia" , "William"])

3)単一の要素に対してinsert(_:at :)メソッドを使用して、配列の中央に新しい要素を追加するには

students.insert("Liam" , at:2 )

4)insert(contentsOf:at :)を使用して別のコレクションまたは配列リテラルから複数の要素を挿入する

students.insert(['Tim','TIM' at: 2 )

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.