जवाबों:
आप +
एक नई व्यूह रचना के साथ सरणियों को संक्षिप्त कर सकते हैं
let c = a + b
print(c) // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
या एक सरणी को दूसरे के साथ जोड़ें +=
(या append
):
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
एक वस्तु को इंगित करता है, जिसे मैं समझता हूं कि इसका मतलब कुछ ऐसा है जो एक वर्ग प्रकार से तात्कालिक है। CGFloat
कोई वस्तु नहीं है, यह एक अदिश मान है। जब तक मैं इसे समझता हूं, सरणियों में स्केलर हो सकते हैं, जब तक कि इसे युक्त के रूप में परिभाषित नहीं किया जाता है AnyObject
या आगे परिष्कृत नहीं किया जाता है। हालांकि, मुझे संदेह है कि समस्या यह है कि सरणी एक वैकल्पिक में लपेटी गई है, इसलिए आपको इसे पहले !
या ?
पहले से खोलना होगा ।
b
के भाग के a
संशोधित किया गया है (इसलिए संभवतः की एक प्रति eliding b
दौरान a.appendContentsOf(b)
)?
स्विफ्ट 5 के साथ, अपनी आवश्यकताओं के अनुसार, आप दो सरणियों को मिलाने / विलय करने के लिए निम्नलिखित छह तरीकों में से एक चुन सकते हैं ।
Array
की +(_:_:)
सामान्य ऑपरेटरArray
एक +(_:_:)
सामान्य ऑपरेटर है। +(_:_:)
निम्नलिखित घोषणा है :
एक संग्रह और एक अनुक्रम के तत्वों को संक्षिप्त करके एक नया संग्रह बनाता है।
static func + <Other>(lhs: Array<Element>, rhs: Other) -> Array<Element> where Other : Sequence, Self.Element == Other.Element
निम्न खेल का मैदान नमूना कोड दिखाता है कि जेनेरिक ऑपरेटर [Int]
का उपयोग करके टाइप के दो सरणियों को एक नए सरणी में कैसे +(_:_:)
मिलाया जाए:
let array1 = [1, 2, 3]
let array2 = [4, 5, 6]
let flattenArray = array1 + array2
print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
Array
की +=(_:_:)
सामान्य ऑपरेटरArray
एक +=(_:_:)
सामान्य ऑपरेटर है। +=(_:_:)
निम्नलिखित घोषणा है :
एक अनुक्रम के तत्वों को एक रेंज-बदली संग्रह में जोड़ता है।
static func += <Other>(lhs: inout Array<Element>, rhs: Other) where Other : Sequence, Self.Element == Other.Element
निम्नलिखित खेल का मैदान नमूना कोड दिखाता है कि जेनेरिक ऑपरेटर [Int]
का उपयोग करके किसी मौजूदा सरणी के प्रकार के तत्वों को कैसे जोड़ा जाए +=(_:_:)
:
var array1 = [1, 2, 3]
let array2 = [4, 5, 6]
array1 += array2
print(array1) // prints [1, 2, 3, 4, 5, 6]
Array
की append(contentsOf:)
विधिस्विफ्ट Array
में एक append(contentsOf:)
विधि है। append(contentsOf:)
निम्नलिखित घोषणा है :
किसी अनुक्रम या संग्रह के तत्वों को इस संग्रह के अंत में जोड़ता है।
mutating func append<S>(contentsOf newElements: S) where S : Sequence, Self.Element == S.Element
निम्न खेल का मैदान नमूना कोड दिखाता है कि विधि [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]
Sequence
की flatMap(_:)
विधिस्विफ्ट flatMap(_:)
सभी प्रकार के लिए एक विधि प्रदान करता है जो Sequence
प्रोटोकॉल के अनुरूप है (सहित Array
)। flatMap(_:)
निम्नलिखित घोषणा है :
इस क्रम के प्रत्येक तत्व के साथ दिए गए परिवर्तन को कॉल करने के संक्षिप्त परिणामों वाले एक सरणी देता है।
func flatMap<SegmentOfResult>(_ transform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence
निम्न खेल का मैदान नमूना कोड दिखाता है कि विधि [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]
Sequence
की joined()
विधि और Array
के init(_:)
प्रारंभकर्तास्विफ्ट joined()
सभी प्रकार के लिए एक विधि प्रदान करता है जो Sequence
प्रोटोकॉल के अनुरूप है (सहित Array
)। joined()
निम्नलिखित घोषणा है :
अनुक्रम के इस क्रम के तत्वों को लौटाता है।
func joined() -> FlattenSequence<Self>
इसके अलावा, स्विफ्ट Array
में एक init(_:)
इनिलाइज़र है। init(_:)
निम्नलिखित घोषणा है :
एक अनुक्रम के तत्वों से युक्त एक सरणी बनाता है।
init<S>(_ s: S) where Element == S.Element, S : Sequence
इसलिए, निम्न खेल का मैदान नमूना कोड दिखाता है कि विधि और इनिशियलाइज़र [Int]
का उपयोग करके टाइप के दो सरणियों को एक नए सरणी में कैसे मर्ज किया जाए: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
की reduce(_:_:)
विधिस्विफ्ट Array
में एक reduce(_:_:)
विधि है। reduce(_:_:)
निम्नलिखित घोषणा है :
दिए गए क्लोजर का उपयोग करके अनुक्रम के तत्वों के संयोजन का परिणाम देता है।
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
निम्न खेल का मैदान कोड दिखाता है कि विधि [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]
+
2 सरणियाँ और सारणियों की joined()
एक सरणी के लिए पसंद है।
+
, तो ऑपरेटर का उपयोग करने से खुद को रोकें , यह बिल्कुल पागल संकलन समय उत्पन्न करता है।
यदि आप ऑपरेटर ओवरलोडिंग के एक बड़े प्रशंसक नहीं हैं, या सिर्फ एक कार्यात्मक प्रकार के अधिक:
// 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]
स्विफ्ट 2.0 के बाद से मेरा पसंदीदा तरीका समतल है
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
let c = [a, b].flatten()
यह वापस आ जाएगा FlattenBidirectionalCollection
यदि आप बस चाहते हैं कि CollectionType
यह पर्याप्त होगा और आपके पास मुफ्त के लिए आलसी मूल्यांकन होगा। यदि आपको वास्तव में ऐरे की जरूरत है तो आप यह कर सकते हैं:
let c = Array([a, b].flatten())
संभव विकल्पों की सूची को पूरा करने के लिए, समतलreduce
के व्यवहार को लागू करने के लिए इस्तेमाल किया जा सकता है :
var a = ["a", "b", "c"]
var b = ["d", "e", "f"]
let res = [a, b].reduce([],combine:+)
प्रस्तुत किए गए लोगों के बीच सबसे अच्छा विकल्प (प्रदर्शन / स्मृति-वार) बस है flatten
, कि एक नई सरणी संरचना बनाए बिना केवल मूल सरणियों को आलसी लपेटें।
लेकिन ध्यान दें कि चपटा एक वापस नहीं करता है LazyCollection
, ताकि आलसी व्यवहार को अगले ऑपरेशन के साथ श्रृंखला (मानचित्र, फ्लैटपाइप, फिल्टर, आदि ...) में प्रचारित न किया जाए।
यदि आलसीपन आपके विशेष मामले में समझ में आता .lazy
है flatten()
, तो उदाहरण के लिए, इस तरह से टॉमाज़ नमूने को संशोधित करने या करने के लिए याद रखें।
let c = [a, b].lazy.flatten()
स्विफ्ट 3.0
आप अतिरिक्त ऑपरेटर के साथ संगत प्रकारों के साथ दो मौजूदा सरणियों को जोड़कर एक नई सरणी बना सकते हैं +
। नए सरणी का प्रकार आपके द्वारा जोड़े गए दो सरणी के प्रकार से अनुमानित है,
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]
यह उपरोक्त कोड के सही परिणाम हैं।
var arrayOne = [1,2,3]
var arrayTwo = [4,5,6]
अगर आप परिणाम चाहते हैं: [1,2,3, [4,5,6]]
arrayOne.append(arrayTwo)
उपरोक्त कोड एक एकल तत्व के रूप में arrayOne को परिवर्तित करेगा और इसे arrayTwo के अंत में जोड़ देगा।
यदि आप परिणाम चाहते हैं: [१, २, ३, ४, ५, ६] तब,
arrayOne.append(contentsOf: arrayTwo)
उपरोक्त कोड arrayTwo के अंत में arrayOne के सभी तत्वों को जोड़ देगा।
धन्यवाद।
यहां दो सरणियों को मर्ज करने का सबसे छोटा तरीका है।
var array1 = [1,2,3]
let array2 = [4,5,6]
उन्हें समाप्त / मर्ज करें
array1 += array2
New value of array1 is [1,2,3,4,5,6]
इसी तरह, सरणियों के शब्दकोशों के साथ एक कर सकते हैं:
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"]!)
और यदि आप "कुंजी" से मेल खाते हैं, तो आप तानाशाही 1 पर पुनरावृत्ति कर सकते हैं और तानाशाही को जोड़ सकते हैं
विभिन्न प्रकार के डेटा प्रकार हैं:
var arrayInt = [Int]()
arrayInt.append(6)
var testArray = ["a",true,3,"b"] as [Any]
testArray.append(someInt)
आउटपुट:
["a", true, 3, "b", "hi", 3, [6]]