Yanıtlar:
Dizileri birleştirerek +
yeni bir dizi oluşturabilirsiniz
let c = a + b
print(c) // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
veya +=
(veya append
) ile bir diziyi diğerine ekleyin :
a += b
// Or:
a.append(contentsOf: b) // Swift 3
a.appendContentsOf(b) // Swift 2
a.extend(b) // Swift 1.2
print(a) // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
AnyObject
bir nesneyi gösterir, ki anladığım kadarıyla bir sınıf türünden başlatılan bir şey anlamına gelir. CGFloat
bir nesne değil, skaler bir değerdir. Anladığım kadarıyla, diziler, içerme olarak tanımlanmadığı AnyObject
veya daha fazla rafine edilmediği sürece, skaler içerebilir . Ancak, burada sorun dizi isteğe bağlı olarak sarılmış olduğundan şüpheleniyorum, bu yüzden !
ya da ?
ilk ile paketini açmak zorunda .
b
parçası a
değiştirilir (bu nedenle muhtemelen bir kopyasını eliding b
sırasında a.appendContentsOf(b)
)?
Swift 5 ile, ihtiyaçlarınıza göre, iki diziyi birleştirmek / birleştirmek için aşağıdaki altı yoldan birini seçebilirsiniz .
Array
'S +(_:_:)
genel jeneratörü ile iki diziyi yeni bir diziye birleştirArray
Bir sahiptir +(_:_:)
jenerik operatörü. +(_:_:)
aşağıdaki beyanı içerir :
Bir koleksiyonun ve sıralamanın öğelerini birleştirerek yeni bir koleksiyon oluşturur.
static func + <Other>(lhs: Array<Element>, rhs: Other) -> Array<Element> where Other : Sequence, Self.Element == Other.Element
Aşağıdaki Playground örnek kodu, genel işleç [Int]
kullanarak iki tür dizinin yeni bir diziye nasıl birleştirileceğini gösterir +(_:_:)
:
let array1 = [1, 2, 3]
let array2 = [4, 5, 6]
let flattenArray = array1 + array2
print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
Array
'in +=(_:_:)
genel operatörArray
Bir sahiptir +=(_:_:)
jenerik operatörü. +=(_:_:)
aşağıdaki beyanı içerir :
Bir dizinin elemanlarını aralıkla değiştirilebilir bir koleksiyona ekler.
static func += <Other>(lhs: inout Array<Element>, rhs: Other) where Other : Sequence, Self.Element == Other.Element
Aşağıdaki Playground örnek kodu, tür operatörünü [Int]
kullanarak bir tür dizisinin öğelerinin mevcut bir diziye nasıl ekleneceğini gösterir +=(_:_:)
:
var array1 = [1, 2, 3]
let array2 = [4, 5, 6]
array1 += array2
print(array1) // prints [1, 2, 3, 4, 5, 6]
Array
'S append(contentsOf:)
yöntemiyle başka bir diziye dizi eklemeSwift'in Array
bir append(contentsOf:)
yöntemi var. append(contentsOf:)
aşağıdaki beyanı içerir :
Bir dizinin veya koleksiyonun öğelerini bu koleksiyonun sonuna ekler.
mutating func append<S>(contentsOf newElements: S) where S : Sequence, Self.Element == S.Element
Aşağıdaki Playground örnek kodu, yöntemi [Int]
kullanarak bir dizinin başka bir tür diziye nasıl ekleneceğini gösterir 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]
Sequence
' Dizisi flatMap(_:)
yöntemiyle iki diziyi yeni bir diziye birleştirSwift, protokole (dahil ) flatMap(_:)
uyan tüm tipler için bir yöntem sağlar . aşağıdaki beyanı içerir :Sequence
Array
flatMap(_:)
Bu dizinin her bir elemanı ile verilen dönüşümü çağırmanın birleştirilmiş sonuçlarını içeren bir dizi döndürür.
func flatMap<SegmentOfResult>(_ transform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence
Aşağıdaki Playground örnek kodu, iki tür [Int]
dizinin flatMap(_:)
yöntemi kullanarak yeni bir diziye nasıl birleştirileceğini gösterir :
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]
Sequence
's joined()
yöntemi ve Array
' init(_:)
başlatıcısı ile yeni bir diziye birleştirSwift, protokole (dahil ) joined()
uyan tüm tipler için bir yöntem sağlar . aşağıdaki beyanı içerir :Sequence
Array
joined()
Bu diziler dizisinin birleştirilmiş öğelerini döndürür.
func joined() -> FlattenSequence<Self>
Ayrıca Swift'in Array
bir init(_:)
başlatıcısı var. init(_:)
aşağıdaki beyanı içerir :
Bir dizinin öğelerini içeren bir dizi oluşturur.
init<S>(_ s: S) where Element == S.Element, S : Sequence
Bu nedenle, aşağıdaki Playground örnek kodu, yöntem ve başlatıcı [Int]
kullanarak iki tür dizinin yeni bir diziye nasıl birleştirileceğini gösterir :joined()
init(_:)
let array1 = [1, 2, 3]
let array2 = [4, 5, 6]
let flattenCollection = [array1, array2].joined() // type: FlattenBidirectionalCollection<[Array<Int>]>
let flattenArray = Array(flattenCollection)
print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
Array
' Dizisi reduce(_:_:)
yöntemiyle iki diziyi yeni bir diziye birleştirSwift'in Array
bir reduce(_:_:)
yöntemi var. reduce(_:_:)
aşağıdaki beyanı içerir :
Belirli bir kapatma kullanarak dizinin öğelerini birleştirmenin sonucunu döndürür.
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
Aşağıdaki Playground kodu, iki tür [Int]
dizinin reduce(_:_:)
yöntemi kullanarak yeni bir diziye nasıl birleştirileceğini gösterir :
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]
+
2 diziler ve joined()
bir dizi dizi için seviyorum .
+
operatörü kullanmaktan koruyun, kesinlikle deli derleme süreleri üretir.
Büyük bir operatör aşırı yükü hayranı değilseniz veya sadece daha fazla fonksiyonel tipte değilseniz:
// use flatMap
let result = [
["merge", "me"],
["We", "shall", "unite"],
["magic"]
].flatMap { $0 }
// Output: ["merge", "me", "We", "shall", "unite", "magic"]
// ... or reduce
[[1],[2],[3]].reduce([], +)
// Output: [1, 2, 3]
Swift 2.0'ın düzleşmesinden bu yana en sevdiğim yöntem
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
let c = [a, b].flatten()
Bu geri dönecek FlattenBidirectionalCollection
Eğer bu sadece CollectionType
yeterli olacak ve ücretsiz tembel değerlendirme olacak bu . Tam olarak Array'a ihtiyacınız varsa bunu yapabilirsiniz:
let c = Array([a, b].flatten())
Olası alternatiflerin listesini tamamlamak için reduce
, düzleştirme davranışını uygulamak için kullanılabilir :
var a = ["a", "b", "c"]
var b = ["d", "e", "f"]
let res = [a, b].reduce([],combine:+)
Sunulanlar arasında en iyi alternatif (performans / bellek açısından) basitçe flatten
, yeni dizileri yeni bir dizi yapısı oluşturmadan tembel bir şekilde sarmaktır.
Ama bildirim olduğunu düzleştirmek dönmez birLazyCollection
, böylece tembel davranış zincir boyunca bir sonraki işleme yayılmaz (harita, flatMap, filtre vb.).
Lazyness sizin özel durumda mantıklı varsa, sadece sona ekleme hatırlamak veya eklemek .lazy
için flatten()
Tomasz numuneyi bu şekilde değiştirerek, örneğin,:
let c = [a, b].lazy.flatten()
Swift 3.0
Toplama operatörü ( +
) ile uyumlu türlerle iki mevcut diziyi bir araya getirerek yeni bir dizi oluşturabilirsiniz . Yeni dizinin türü, birlikte eklediğiniz iki dizinin türünden çıkarılır,
let arr0 = Array(repeating: 1, count: 3) // [1, 1, 1]
let arr1 = Array(repeating: 2, count: 6)//[2, 2, 2, 2, 2, 2]
let arr2 = arr0 + arr1 //[1, 1, 1, 2, 2, 2, 2, 2, 2]
bu yukarıdaki kodların doğru sonuçlarıdır.
var arrayOne = [1,2,3]
var arrayTwo = [4,5,6]
sonuç olarak isterseniz: [1,2,3, [4,5,6]]
arrayOne.append(arrayTwo)
yukarıdaki kod, arrayOne öğesini tek bir öğe olarak dönüştürecek ve arrayTwo öğesinin sonuna ekleyecektir.
sonuç olarak isterseniz: [1, 2, 3, 4, 5, 6] o zaman,
arrayOne.append(contentsOf: arrayTwo)
Yukarıdaki kod, arrayTwo öğesinin sonuna arrayOne öğesinin tüm öğelerini ekler.
Teşekkürler.
İşte iki diziyi birleştirmenin en kısa yolu.
var array1 = [1,2,3]
let array2 = [4,5,6]
Bunları birleştirin / birleştirin
array1 += array2
New value of array1 is [1,2,3,4,5,6]
Benzer şekilde, dizilerin sözlükleriyle:
var dict1 = [String:[Int]]()
var dict2 = [String:[Int]]()
dict1["key"] = [1,2,3]
dict2["key"] = [4,5,6]
dict1["key"] = dict1["key"]! + dict2["key"]!
print(dict1["key"]!)
ve dict1 üzerinde yineleme yapabilir ve "anahtar" eşleşirse dict2'yi ekleyebilirsiniz
Farklı veri türleri olan marge dizisi:
var arrayInt = [Int]()
arrayInt.append(6)
var testArray = ["a",true,3,"b"] as [Any]
testArray.append(someInt)
Çıktı :
["a", true, 3, "b", "hi", 3, [6]]