উত্তর:
আপনি +
একটি নতুন অ্যারে তৈরি করে অ্যারেগুলি সংহত করতে পারেন
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
বা আরও পরিমার্জনযোগ্য হয়। তবে আমার সন্দেহ হয় এখানে সমস্যাটি হ'ল অ্যারেটি একটি alচ্ছিকভাবে আবৃত থাকে, সুতরাং আপনাকে এটি দিয়ে !
বা ?
প্রথমে মোড়ক করতে হবে ।
b
অংশটি a
সংশোধিত হয়েছে কিনা তা নির্ধারণের ক্ষেত্রে প্রসারিত (তাই সম্ভবত কোনও অনুলিপি 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]
সুইফট ২.০ থেকে আমার প্রিয় পদ্ধতিটি সমতল
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
, যাতে অলস আচরণের শৃঙ্খল (মানচিত্র, flatMap, ফিল্টার, ইত্যাদি ...) বরাবর পরবর্তী অপারেশনে প্রচারিত করা হবে না।
Lazyness আপনার নির্দিষ্ট ক্ষেত্রে জ্ঞান করে তোলে, তাহলে শুধু শুরুতে যোগ মনে রাখবেন বা সংযোজন .lazy
করতে flatten()
, উদাহরণস্বরূপ, পরিবর্তন Tomasz নমুনা এই ভাবে:
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)
উপরের কোডটি অ্যারেঅনকে একক উপাদান হিসাবে রূপান্তর করবে এবং অ্যারেটুইয়ের শেষে যুক্ত করবে।
আপনি যদি ফলাফল হিসাবে চান: [1, 2, 3, 4, 5, 6] তবে,
arrayOne.append(contentsOf: arrayTwo)
উপরের কোডটি অ্যারে টু এর শেষে অ্যারেঅন এর সমস্ত উপাদান যুক্ত করবে।
ধন্যবাদ।
দুটি অ্যারে একত্রে সংক্ষিপ্ততম উপায়।
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" কী মিললে আপনি ডেট 1 এর মাধ্যমে পুনরাবৃত্তি করতে পারেন এবং ডিক 2 যোগ করতে পারেন
মার্জ অ্যারে যা বিভিন্ন ডেটা ধরণের:
var arrayInt = [Int]()
arrayInt.append(6)
var testArray = ["a",true,3,"b"] as [Any]
testArray.append(someInt)
আউটপুট:
["a", true, 3, "b", "hi", 3, [6]]