web-dev-qa-db-ja.com

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

たとえば、次のように配列があるとします。

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

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

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

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

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

302

Swift 3/4 以降、これは次のように行われます。

配列の末尾に新しい要素を追加します。

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)

詳細については、「 The Swift Programming Language 」の「Collection Types」の章を参照してください。

543
Mick MacCallum

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

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では '+ ='を使うことはできません。

17
steveq88

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

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

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

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

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

16
rickster

+ =および+演算子を使用してください。

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"
10
Aqib Mumtaz

あなたが最初の位置でアイテムを失うことなしに配列の始めに挿入したいならば、これは小さな拡張です。

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

Swift 4.1とXcode 9.4.1の場合

基本的に2つの方法でオブジェクトをArrayに追加できます

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)
3
iOS

append を提案する解決法を追加するために、これが 償却された一定時間 の操作であることを知っておくと便利です:

複雑さ:自己の記憶域が別のライブ配列と共有されていない限り、償却されたO(1)。 selfがブリッジされたNSArrayをラップしない場合はO(count)。それ以外の場合、効率は規定されていません。

私はSwiftのconsのような演算子を探しています。元の配列を変更せずに、要素が最後に固定されたnew不変配列を一定の時間内に返す必要があります。私はまだこれを行う標準的な機能を見つけていません。私はそれを見つけたら私は戻って報告することを忘れないようにしよう!

2
Benjohn

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

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

あるいは、加算代入演算子(+ =)を使用して、配列の末尾に新しい項目を追加します。

抜粋:アップル社の "The Swift Programming Language"。 https://itun.es/us/jEUH0.l

2
aglasser

独自のオブジェクトを追加したい場合は、 Array structを展開します。

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

あなたが使用することができます

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

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

スイフト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"]

それは、とても簡単な方法です。