অ্যাপলের নতুন ভাষা সুইফ্টের অ্যারে থেকে আমি কীভাবে একটি উপাদান আনসেট / আনসেট করতে পারি?
এখানে কিছু কোড রয়েছে:
let animals = ["cats", "dogs", "chimps", "moose"]
animals[2]
অ্যারে থেকে উপাদানটি কীভাবে সরানো যেতে পারে?
অ্যাপলের নতুন ভাষা সুইফ্টের অ্যারে থেকে আমি কীভাবে একটি উপাদান আনসেট / আনসেট করতে পারি?
এখানে কিছু কোড রয়েছে:
let animals = ["cats", "dogs", "chimps", "moose"]
animals[2]
অ্যারে থেকে উপাদানটি কীভাবে সরানো যেতে পারে?
উত্তর:
let
শব্দ ধ্রুবক পরিবর্তন করা যাবে না যে ঘোষণা করা হয়। আপনি যদি কোনও ভেরিয়েবল পরিবর্তন করতে চান তবে এর var
পরিবর্তে আপনার ব্যবহার করা উচিত , যেমন:
var animals = ["cats", "dogs", "chimps", "moose"]
animals.remove(at: 2) //["cats", "dogs", "moose"]
একটি অ-পরিবর্তনকারী বিকল্প যা মূল সংগ্রহটি অপরিবর্তিত রাখবে তা হ'ল আপনি filter
যে উপাদানগুলি সরিয়ে নিতে চান তা ছাড়াই একটি নতুন সংগ্রহ তৈরি করতে ব্যবহার করা, যেমন:
let pets = animals.filter { $0 != "chimps" }
প্রদত্ত
var animals = ["cats", "dogs", "chimps", "moose"]
animals.removeFirst() // "cats"
print(animals) // ["dogs", "chimps", "moose"]
animals.removeLast() // "moose"
print(animals) // ["cats", "dogs", "chimps"]
animals.remove(at: 2) // "chimps"
print(animals) // ["cats", "dogs", "moose"]
শুধুমাত্র একটি উপাদান জন্য
if let index = animals.firstIndex(of: "chimps") {
animals.remove(at: index)
}
print(animals) // ["cats", "dogs", "moose"]
একাধিক উপাদান জন্য
var animals = ["cats", "dogs", "chimps", "moose", "chimps"]
animals = animals.filter(){$0 != "chimps"}
print(animals) // ["cats", "dogs", "moose"]
filter
) এবং যে উপাদানটি সরানো হয়েছিল তা ফিরিয়ে দেয়।dropFirst
বা dropLast
একটি নতুন অ্যারে তৈরি করতে পারেন ।সুইফট 5.2 এ আপডেট হয়েছে
উপরের উত্তরগুলি ধরে মনে হচ্ছে যে আপনি যে উপাদানটি মুছতে চান তার সূচি আপনি জানেন।
অ্যারেতে আপনি মুছে ফেলতে চান এমন অবজেক্টের রেফারেন্সটি প্রায়শই জানেন । (আপনি আপনার অ্যারেটি দিয়ে পুনরাবৃত্তি করেছেন এবং এটি সন্ধান করেছেন, যেমন) এই জাতীয় ক্ষেত্রে অবজেক্টের রেফারেন্সের সাথে সরাসরি কাজ করা আরও সহজ হতে পারে যেখানে তার সূচকটি সর্বত্রই পাস না করে। অতএব, আমি এই সমাধান প্রস্তাব। এটি পরিচয় অপারেটর ব্যবহার করে !==
, যা আপনি দুটি বস্তুর উল্লেখ উভয় একই বস্তুর উদাহরণকে উল্লেখ করে কিনা তা পরীক্ষা করতে ব্যবহার করেন।
func delete(element: String) {
list = list.filter() { $0 !== element }
}
অবশ্যই এটি কেবল String
এস এর জন্য কাজ করে না ।
list = list.filter({ $0 != element })
array.indexOf({ $0 == obj })
list
মুছে ফেলা হয় তবে এই মুছে ফেলা অন্য অ্যারে রেফারেন্সগুলি আপডেট করবে না যেহেতু আপনি নতুন অ্যারে নিযুক্ত করছেন list
। আপনি যদি এই পদ্ধতির সাথে অ্যারেগুলি থেকে মুছে ফেলেন তবে কেবল একটি সূক্ষ্ম ধারণা।
সুইফ্ট 5: ফিল্টারিং ছাড়াই এখানে একটি অ্যারেতে উপাদানগুলি সরানোর জন্য একটি দুর্দান্ত এবং সহজ এক্সটেনশন:
extension Array where Element: Equatable {
// Remove first collection element that is equal to the given `object`:
mutating func remove(object: Element) {
guard let index = firstIndex(of: object) else {return}
remove(at: index)
}
}
ব্যবহার:
var myArray = ["cat", "barbecue", "pancake", "frog"]
let objectToRemove = "cat"
myArray.remove(object: objectToRemove) // ["barbecue", "pancake", "frog"]
অন্যান্য ধরণের সাথেও কাজ করে, যেমন Int
যেহেতু Element
একটি জেনেরিক প্রকার:
var myArray = [4, 8, 17, 6, 2]
let objectToRemove = 17
myArray.remove(object: objectToRemove) // [4, 8, 6, 2]
সুইফট ৪-এর জন্য:
list = list.filter{$0 != "your Value"}
এক্সকোড 10+ হিসাবে এবং ডাব্লুডব্লিউডিসি 2018 সেশন 223 অনুসারে, "আলগোরিদিম আলিঙ্গন করা," এগিয়ে যাওয়ার একটি ভাল পদ্ধতি হবেmutating func removeAll(where predicate: (Element) throws -> Bool) rethrows
অ্যাপলের উদাহরণ:
var phrase = "The rain in Spain stays mainly in the plain."
let vowels: Set<Character> = ["a", "e", "i", "o", "u"]
phrase.removeAll(where: { vowels.contains($0) })
// phrase == "Th rn n Spn stys mnly n th pln."
দেখতে অ্যাপলের ডকুমেন্টেশন
সুতরাং ওপি-র উদাহরণে, প্রাণীগুলিকে অপসারণ [2], "শিম্পস":
var animals = ["cats", "dogs", "chimps", "moose"]
animals.removeAll(where: { $0 == "chimps" } )
// or animals.removeAll { $0 == "chimps" }
এই পদ্ধতিটি পছন্দ করা যেতে পারে কারণ এটি ভাল স্কেল করে (লিনিয়ার বনাম চতুর্ভুজ), পাঠযোগ্য এবং পরিষ্কার। মনে রাখবেন যে এটি কেবল এক্সকোড 10+ তে কাজ করে এবং এটি লেখার মতোই বিটাতে রয়েছে।
কয়েকটি অপারেশন সুইটের ইন অ্যারে সম্পর্কিত
অ্যারে তৈরি করুন
var stringArray = ["One", "Two", "Three", "Four"]
অ্যারেতে অবজেক্ট যুক্ত করুন
stringArray = stringArray + ["Five"]
সূচক অবজেক্ট থেকে মান পান
let x = stringArray[1]
অবজেক্ট অবজেক্ট
stringArray.append("At last position")
সূচীতে অবজেক্ট sertোকান
stringArray.insert("Going", atIndex: 1)
অবজেক্ট সরান
stringArray.removeAtIndex(3)
কনক্যাট অবজেক্টের মান
var string = "Concate Two object of Array \(stringArray[1]) + \(stringArray[2])"
আপনি এটা করতে পারে। প্রথমে নিশ্চিত Dog
হোন যে অ্যারেতে সত্যই উপস্থিত রয়েছে, তারপরে এটি সরিয়ে ফেলুন। যোগ for
বিবৃতি আপনি যদি মনে করেন Dog
may আপনার শৃঙ্খলার একাধিকবার ঘটে।
var animals = ["Dog", "Cat", "Mouse", "Dog"]
let animalToRemove = "Dog"
for object in animals
{
if object == animalToRemove{
animals.removeAtIndex(animals.indexOf(animalToRemove)!)
}
}
আপনি যদি নিশ্চিত Dog
হন যে অ্যারে থেকে বেরিয়ে এসেছেন এবং কেবল একবার ঘটেছে কেবল তা করুন:
animals.removeAtIndex(animals.indexOf(animalToRemove)!)
যদি আপনার দুটি, স্ট্রিং এবং সংখ্যা থাকে
var array = [12, 23, "Dog", 78, 23]
let numberToRemove = 23
let animalToRemove = "Dog"
for object in array
{
if object is Int
{
// this will deal with integer. You can change to Float, Bool, etc...
if object == numberToRemove
{
array.removeAtIndex(array.indexOf(numberToRemove)!)
}
}
if object is String
{
// this will deal with strings
if object == animalToRemove
{
array.removeAtIndex(array.indexOf(animalToRemove)!)
}
}
}
আপনি যে উপাদানটি সরাতে চান সেটির সূচি যদি আপনি না জানেন এবং উপাদানটি ইক্যুটেবল প্রোটোকল অনুসারে হয় তবে আপনি এটি করতে পারেন:
animals.removeAtIndex(animals.indexOf("dogs")!)
ইক্যুটেবল প্রোটোকল উত্তর দেখুন: আমি কীভাবে ইনডেক্সঅবঅবজেক্ট করব বা একটি সঠিক কন্টেন্টঅবজেক্ট করব
সূচিপত্র অ্যারে ব্যবহার করে উপাদানগুলি সরান:
স্ট্রিং এবং সূচকের অ্যারে
let animals = ["cats", "dogs", "chimps", "moose", "squarrel", "cow"]
let indexAnimals = [0, 3, 4]
let arrayRemainingAnimals = animals
.enumerated()
.filter { !indexAnimals.contains($0.offset) }
.map { $0.element }
print(arrayRemainingAnimals)
//result - ["dogs", "chimps", "cow"]
পূর্ণসংখ্যা এবং সূচকের অ্যারে
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
let indexesToRemove = [3, 5, 8, 12]
numbers = numbers
.enumerated()
.filter { !indexesToRemove.contains($0.offset) }
.map { $0.element }
print(numbers)
//result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
অন্য অ্যারের উপাদান মান ব্যবহার করে উপাদানগুলি সরান
পূর্ণসংখ্যার অ্যারে
let arrayResult = numbers.filter { element in
return !indexesToRemove.contains(element)
}
print(arrayResult)
//result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
স্ট্রিং এর অ্যারে
let arrayLetters = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
let arrayRemoveLetters = ["a", "e", "g", "h"]
let arrayRemainingLetters = arrayLetters.filter {
!arrayRemoveLetters.contains($0)
}
print(arrayRemainingLetters)
//result - ["b", "c", "d", "f", "i"]
@ অজানা সূচকের উপাদান সরান "সুরগের বিকল্প সম্পর্কিত:
"IndexOf (এলিমেন্ট)" এর আরও শক্তিশালী সংস্করণ রয়েছে যা বস্তুর নিজের পরিবর্তে কোনও প্রিডিকেটে মিলবে। এটি একই নামে যায় তবে এটি myObjects.indexOf called $ 0.property = valueToMatch by দ্বারা ডাকে} এটি MyObjects অ্যারেতে পাওয়া প্রথম মিলের আইটেমের সূচকটি প্রদান করে।
যদি উপাদানটি কোনও অবজেক্ট / স্ট্রাক্ট হয় তবে আপনি যে কোনও একটি বৈশিষ্ট্যের মানের ভিত্তিতে সেই উপাদানটি সরাতে পারেন। উদাহরণস্বরূপ, আপনার একটি গাড়ী শ্রেণীর কার সিঙ্গল সম্পত্তি রয়েছে এবং আপনি আপনার গাড়িআরে থেকে "লাল" গাড়িটি সরাতে চান।
if let validIndex = (carsArray.indexOf{$0.color == UIColor.redColor()}) {
carsArray.removeAtIndex(validIndex)
}
অবশ্যই, আপনি পুনরায় / যখন লুপের মধ্যে বিবৃতিটি উপরের এম্বেড করে "সমস্ত" লাল গাড়িগুলি সরিয়ে ফেলতে এবং লুপের বাইরে "ব্রেক" -তে একটি পতাকা সেট করার জন্য অন্য কোনও ব্লক সংযুক্ত করে এটি পুনরায় কাজ করতে পারেন।
আপনার যদি কাস্টম অবজেক্টের অ্যারে থাকে তবে আপনি এই জাতীয় নির্দিষ্ট সম্পত্তি দ্বারা অনুসন্ধান করতে পারেন:
if let index = doctorsInArea.indexOf({$0.id == doctor.id}){
doctorsInArea.removeAtIndex(index)
}
বা উদাহরণস্বরূপ যদি আপনি নাম দ্বারা অনুসন্ধান করতে চান
if let index = doctorsInArea.indexOf({$0.name == doctor.name}){
doctorsInArea.removeAtIndex(index)
}
এটি করা উচিত (পরীক্ষিত নয়):
animals[2..3] = []
সম্পাদনা করুন: এবং আপনাকে এটিকে একটি var
নয় let
, অন্যথায় এটি একটি অপরিবর্তনীয় ধ্রুবক তৈরি করা দরকার।
আমি নিম্নলিখিত এক্সটেনশানটি নিয়ে এসেছি Array
যা Array
প্রয়োগ থেকে উপাদানগুলি ধরে নিয়ে একটি থেকে উপাদানগুলি সরিয়ে নেওয়ার যত্ন নেয় Equatable
:
extension Array where Element: Equatable {
mutating func removeEqualItems(item: Element) {
self = self.filter { (currentItem: Element) -> Bool in
return currentItem != item
}
}
mutating func removeFirstEqualItem(item: Element) {
guard var currentItem = self.first else { return }
var index = 0
while currentItem != item {
index += 1
currentItem = self[index]
}
self.removeAtIndex(index)
}
}
var test1 = [1, 2, 1, 2]
test1.removeEqualItems(2) // [1, 1]
var test2 = [1, 2, 1, 2]
test2.removeFirstEqualItem(2) // [1, 1, 2]
স্ট্রিং অবজেক্ট সরানোর জন্য এক্সটেনশন
extension Array {
mutating func delete(element: String) {
self = self.filter() { $0 as! String != element }
}
}
আমি এই এক্সটেনশানটি প্রায় বরুণের মতোই ব্যবহার করি তবে এটির (নীচে) সমস্ত উদ্দেশ্য রয়েছে:
extension Array where Element: Equatable {
mutating func delete(element: Iterator.Element) {
self = self.filter{$0 != element }
}
}
remove
সরানো উপাদানটি ফেরত দেয়:let animal = animals.remove(at: 2)