উত্তর:
একটি পদ্ধতি আছে (আসলে একটি ফাংশন)
myArray.removeAll()
structএবং স্ট্রাক্টের functionsক্লাসগুলির বিপরীতে রয়েছে methods।
Arrayগুলি হয় structগুলি। ভেটেরান অবজেক্টিভ সি কোডার এখানে ...
removeAll()। তবে কোনও ভিউ অদৃশ্য হয়ে গেলে সমস্ত অপ্রয়োজনীয় ডেটা অপসারণ করা ভাল (মেমরি শৃঙ্খলা) অনুশীলন।
@ ভাদিয়ানদের উত্তরটি সমাধান হ'ল এই বিষয়টি বিবেচনা করেই , আমি কেবল এটি উল্লেখ করতে চাই যে আপনার কোডটি কাজ করে না।
প্রথমত, অ্যারে সূচকগুলি 0-ভিত্তিক হয়, সুতরাং আপনার সেই অনুযায়ী পরিসীমাটি পুনর্লিখন করা উচিত:
for index 0..<myArray.count {
myArray.removeAtIndex(index)
}
তবে এই বাস্তবায়ন বিপর্যয়ের কারণ হতে চলেছে। আপনার যদি 10 টি উপাদানের অ্যারে থাকে তবে শেষ উপাদানটি সূচক 9 এ অবস্থানটি দখল করে।
এই লুপটি ব্যবহার করে, প্রথম পুনরাবৃত্তিতে সূচক 0-এর এলিমেন্টটি সরিয়ে ফেলা হয় এবং এর ফলে শেষ উপাদানটি সূচক 8 এ নেমে যায়।
পরবর্তী পুনরাবৃত্তিতে, সূচকে 1 এ উপাদানটি সরানো হবে এবং শেষ উপাদানটি সূচী 7 এ নেমে আসে। এবং এর মতো।
লুপের এক পর্যায়ে, অ বিদ্যমান বিদ্যমান সূচকের জন্য কোনও উপাদান সরিয়ে ফেলার প্রচেষ্টা অ্যাপ্লিকেশানটিকে ক্রাশ করবে।
কোনও লুপে অ্যারে থেকে উপাদানগুলি সরানোর সময়, এটি করার সর্বোত্তম উপায় হ'ল বিপরীত ক্রমে এটি অনুসরণ করে:
for index in reverse(0..<myArray.count) {
myArray.removeAtIndex(index)
}
এটি নিশ্চিত করে যে সরানো উপাদানগুলি এখনও ক্রিয়াকলাপে থাকা উপাদানগুলির ক্রম বা সূচি পরিবর্তন করবে না।
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }সমস্ত একটি লাইন পছন্দ করি না তবে কোডটি একটি লাইনে সংকলন করা উচিত
for _ in 0...<myArray.count { myArray.removeAtIndex(0) }? দক্ষতা সম্পর্কে আমি এখনও খুব বেশি জানি না, তবে এইভাবে আপনাকে পরিসীমাটি বিপরীত করার প্রয়োজন হবে না, তাই এটি সম্ভবত দ্রুত।
আপনি inকীওয়ার্ডটি হারিয়েছেন যা আপনার ত্রুটি ঘটাচ্ছে। কোডটি হওয়া উচিত:
for index in 1...myArray.count {
myArray.removeAtIndex(index)
}
এটি অবশ্য বেশ কয়েকটি কারণে আপনি যেমন আশা করবেন তেমন কার্যকর হবে না:
count - 1যা প্রয়োজন হবে1..<myArray.countআপনি যদি অ্যারে থেকে সমস্ত জিনিস সরিয়ে ফেলার চেষ্টা করছেন তবে অন্যের পরামর্শ ও ব্যবহার মতো আপনার করা উচিত:
myArray.removeAll()
আপনি কেবল প্রথম উপাদানটি চান এবং অন্য কোনও কিছুই আপনি প্রথম অবজেক্টের রেফারেন্স পেতে পারেননি, অ্যারেটি খালি করুন, তারপরে অবজেক্টটি আবার যুক্ত করুন:
var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)
count - 1)।
আপনার কোডটি কাজ করা উচিত, এটি সীমাবদ্ধতার বাইরে।
সুইফট 3
existingArray = []
এটি করে আপনি বিদ্যমান অ্যারে একটি খালি অ্যারে পুনরায় নিয়োগ করুন এবং ডেটা টাইপ উল্লেখ করা হয়।
বিকল্পভাবে, আপনি ব্যবহার করতে পারেন removeAllযা অ্যারে থেকে সমস্ত উপাদান সরিয়ে দেয় এবং বিদ্যমান ক্ষমতা রাখার জন্য একটি বিকল্প সরবরাহ করে।
existingArray.removeAll()
এটি এমন একটি mutatingফাংশন যার অর্থ পদ্ধতিটি কল করে অ্যারে পরিবর্তন করা হবে (খালি)।
কাইল সঠিক পথে রয়েছে, তবে তার কোডটি ব্যর্থ হবে কারণ গণনা করার সময় সম্ভাব্য সূচকগুলি হ্রাস পাবে এবং অবৈধ সূচকের দিকে নিয়ে যাবে।
এটির সমাধানের একটি উপায় হ'ল পিছনের দিকে গণনা করা। দ্রুতগতিতে এটি স্ট্রাইড ব্যবহার করে সম্পন্ন হয় ।
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
অন্য বিকল্প ব্যবহার করা হবে filter()
সুইফট ১.২
myArray = filter(myArray, { (obj) -> Bool in
return false
})
সুইফট 2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
stride
নেই removeAllObjects () পদ্ধতি সুইফট 2 প্রাপ্তিসাধ্য
Syntax : public func removeAllObjects()
Eg.: mainArray.removeAllObjects
নির্দিষ্ট সূচকের উপাদানগুলিকে অপসারণ করতে:
Syntax : public func removeObjectAtIndex(index: Int)
Eg.: mainArray.removeObjectAtIndex(5)
শেষ উপাদান ব্যবহার অপসারণ করতে:
Syntax : public func removeLastObject()
Eg.: mainArray.removeLastObject()
নির্দিষ্ট পরিসীমা ব্যবহারের উপাদানগুলি অপসারণ করতে:
Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)
নির্দিষ্ট উপাদান ব্যবহার অপসারণ করতে:
Syntax : public func removeObject(anObject: AnyObject)
স্ক্রিনশটের নীচে এনএসমেটেবলআরে এক্সটেনশনে উপলব্ধ পদ্ধতির তালিকা দেখায়
আপনি এটি করতে পারেন:
for _ in myArray
{
myArray.removeAtIndex(0)
}
আপনি যেটি সম্পাদন করতে চেষ্টা করছেন তার বিচারে ভাদিয়ানের সঠিক উত্তর রয়েছে। আপনার কোড নমুনার ফলাফল হিসাবে প্রদর্শিত সমস্যাটি আপনি forলুপটি তৈরি করার চেষ্টা করছেন due Indexডিফল্টরূপে 0 এ শুরু হবে। লুপের জন্য তৈরি করার সঠিক উপায় নয় এর পরে একটি সংখ্যা পরিসরে যোগ করা। এজন্য আপনি ত্রুটিটি দেখছেন। পরিবর্তে, নিম্নলিখিত হিসাবে আপনার লুপ জন্য তৈরি করুন:
for index in myArray.indices {
// Do stuff
}
আশা করি, এই উত্তরটি অন্যদেরকে সহায়তা করবে যা সুইফ্ট বা প্রোগ্রামিংয়ে নতুন।
অ্যারের সমস্ত উপাদান মুছে ফেলার জন্য
var array = [1,2,3,4,5,6]()
array.removeAll()