arrays - সহজ - একটি উপাদান একটি অ্যারে কিনা তা পরীক্ষা করুন
সি প্রোগ্রামিং ফাংশন (10)
সুইফ্টে, কোন অ্যারেতে একটি উপাদান বিদ্যমান কিনা তা আমি কিভাবে পরীক্ষা করতে পারি? এক্সকোড contain
, include
, বা has
, এবং বইয়ের মাধ্যমে একটি দ্রুত অনুসন্ধান কিছুই আপ পরিণত করার জন্য কোন পরামর্শ নেই। কোন ধারণা কিভাবে এই জন্য চেক? আমি জানি যে একটি পদ্ধতি find
যা সূচী সংখ্যাটি ফেরত দেয়, কিন্তু এমন একটি পদ্ধতি আছে যা রুবিয়ের #include?
মতো বুলিয়ান প্রদান করে #include?
?
আমি কি প্রয়োজন উদাহরণ:
var elements = [1,2,3,4,5]
if elements.contains(5) {
//do something
}
আমি ফিল্টার ব্যবহৃত।
let results = elements.filter { el in el == 5 }
if results.count > 0 {
// any matching items are in results
} else {
// not found
}
আপনি যদি চান, আপনি যে সংকুচিত করতে পারেন
if elements.filter({ el in el == 5 }).count > 0 {
}
আশা করি এইটি কাজ করবে.
সুইফ্ট জন্য আপডেট 2
ডিফল্ট বাস্তবায়ন জন্য Hurray!
if elements.contains(5) {
// any matching items are in results
} else {
// not found
}
এই এক্সটেনশানটি ব্যবহার করুন:
extension Array {
func contains<T where T : Equatable>(obj: T) -> Bool {
return self.filter({$0 as? T == obj}).count > 0
}
}
ব্যবহার করুন:
array.contains(1)
Swift 2/3 জন্য আপডেট করা হয়েছে
দ্রষ্টব্য যে সুইফ্ট 3 (বা এমনকি 2) হিসাবে, Array
এক্সটেনশান পদ্ধতির একটি জোড়া জুড়ে বিশ্বব্যাপী ফাংশনটি তৈরি করা হয়েছে, Array
এক্সটেনশনটি আর প্রয়োজন নেই, যা আপনাকে এর মধ্যে কোনটি করতে দেয়:
let a = [ 1, 2, 3, 4 ]
a.contains(2) // => true, only usable if Element : Equatable
a.contains { $0 < 1 } // => false
এখানে যারা এসেছেন তাদের সন্ধানের জন্য এবং একটি অ্যারে থেকে একটি বস্তু সরাতে:
সুইফ্ট 1
if let index = find(itemList, item) {
itemList.removeAtIndex(index)
}
সুইফ্ট 2
if let index = itemList.indexOf(item) {
itemList.removeAtIndex(index)
}
সুইফ্ট 3, 4
if let index = itemList.index(of: item) {
itemList.remove(at: index)
}
এটি সাধারনতম সহজ উপায় অ্যারেতে ফিল্টারটি ব্যবহার করা।
let result = elements.filter { $0==5 }
result
যদি বিদ্যমান থাকে তবে উপস্থিত উপাদানটি উপস্থিত থাকবে এবং উপাদানটি উপস্থিত না থাকলে খালি থাকবে। result
ফাঁকা হলে কেবল অ্যারেতে উপস্থিত থাকে কিনা তা যাচাই করবে। আমি নিম্নলিখিত ব্যবহার করবে:
if result.isEmpty {
// element does not exist in array
} else {
// element exists
}
দ্রুতগতি
আপনি যদি বস্তু ব্যবহার না করেন তবে আপনি এই কোডটি ব্যবহার করতে পারেন।
let elements = [ 10, 20, 30, 40, 50]
if elements.contains(50) {
print("true")
}
আপনি দ্রুত গতিতে NSObject ক্লাস ব্যবহার করা হয়। এই পরিবর্তনশীল আমার প্রয়োজন অনুযায়ী। আপনি আপনার প্রয়োজনের জন্য পরিবর্তন করতে পারেন।
var cliectScreenList = [ATModelLeadInfo]()
var cliectScreenSelectedObject: ATModelLeadInfo!
এটি একই ডাটা টাইপ জন্য।
{ $0.user_id == cliectScreenSelectedObject.user_id }
আপনি AnyObject টাইপ করতে চান।
{ "\($0.user_id)" == "\(cliectScreenSelectedObject.user_id)" }
সম্পূর্ণ শর্ত
if cliectScreenSelected.contains( { $0.user_id == cliectScreenSelectedObject.user_id } ) == false {
cliectScreenSelected.append(cliectScreenSelectedObject)
print("Object Added")
} else {
print("Object already exists")
}
ব্যবহারকারী নির্দিষ্ট অ্যারের উপাদান খুঁজে পেতে হলে নিখুঁত কোড হিসাবে একই কোড ব্যবহার করুন।
var arrelemnts = ["sachin", "test", "test1", "test3"]
if arrelemnts.contains("test"){
print("found") }else{
print("not found") }
যদি কোনও indexPath
নির্বাচিতদের মধ্যে (যদি কোনও UICollectionView
বা UITableView
cellForItemAtIndexPath
ফাংশনগুলির মধ্যে থাকে তবে) এটি সন্ধান করার চেষ্টা করছে:
var isSelectedItem = false
if let selectedIndexPaths = collectionView.indexPathsForSelectedItems() as? [NSIndexPath]{
if contains(selectedIndexPaths, indexPath) {
isSelectedItem = true
}
}
সুইফ্ট 4, ফিল্টার ফাংশন দিয়ে এটি অর্জন করার আরেকটি উপায়
var উপাদান = [1,2,3,4,5]
if let object = elements.filter({ $0 == 5 }).first {
print("found")
} else {
print("not found")
}
(সুইফ্ট 3)
একটি উপাদান একটি অ্যারের মধ্যে বিদ্যমান কিনা পরীক্ষা করুন (কিছু মানদণ্ড পূরণ করা), এবং যদি তাই হয়, প্রথম যেমন উপাদান সঙ্গে কাজ চালিয়ে যান
যদি উদ্দেশ্য হয়:
- একটি অ্যারের মধ্যে একটি উপাদান বিদ্যমান কিনা তা পরীক্ষা করতে (/ কিছু বুলিয়ান মানদণ্ড পূরণ করে, প্রয়োজনীয়তা সমতা পরীক্ষা নয়)
- এবং যদি তাই হয়, এগিয়ে যান এবং যেমন প্রথম উপাদান সঙ্গে কাজ,
তারপরে একটি বিকল্প contains(_:)
ব্লুপ্রিন্টেড Sequence
first(where:)
Sequence
:
let elements = [1, 2, 3, 4, 5]
if let firstSuchElement = elements.first(where: { $0 == 4 }) {
print(firstSuchElement) // 4
// ...
}
এই রূপান্তরিত উদাহরণে, এটির ব্যবহারটি নির্বোধ বলে মনে হতে পারে, তবে এটি কোনও উপাদানের পরিপূরক কোন উপাদানের অস্তিত্বের অ-মৌলিক উপাদানগুলির অ্যারের অনুসন্ধানের ক্ষেত্রে খুবই উপযোগী। যেমন
struct Person {
let age: Int
let name: String
init(_ age: Int, _ name: String) {
self.age = age
self.name = name
}
}
let persons = [Person(17, "Fred"), Person(16, "Susan"),
Person(19, "Hannah"), Person(18, "Sarah"),
Person(23, "Sam"), Person(18, "Jane")]
if let eligableDriver = persons.first(where: { $0.age >= 18 }) {
print("\(eligableDriver.name) can possibly drive the rental car in Sweden.")
// ...
} // Hannah can possibly drive the rental car in Sweden.
let daniel = Person(18, "Daniel")
if let sameAgeAsDaniel = persons.first(where: { $0.age == daniel.age }) {
print("\(sameAgeAsDaniel.name) is the same age as \(daniel.name).")
// ...
} // Sarah is the same age as Daniel.
.filter { ... some condition }.first
ব্যবহার করে যে কোন শৃঙ্খল অপারেশন .filter { ... some condition }.first
প্রতিস্থাপিত হতে পারে first(where:)
। পরেরটি অভিপ্রায়টি আরও ভালো করে দেখায় এবং .filter
সম্ভাব্য অ-অলস যন্ত্রপাতিগুলির উপর কার্যক্ষমতা সুবিধা দেয় কারণ এটি ফিল্টারটি পাস করে (সম্ভাব্য) প্রথম উপাদানটি বের করার আগে পূর্ণ অ্যারেটি পাস করবে।
একটি উপাদান একটি অ্যারের মধ্যে বিদ্যমান কিনা পরীক্ষা করুন (কিছু মানদণ্ড পূরণ), এবং যদি তাই হয়, প্রথম যেমন উপাদান মুছে ফেলুন
নীচের একটি মন্তব্য:
কিভাবে আমি অ্যারে থেকে প্রথম
firstSuchElement
অপসারণ করতে পারেন?
উপরের উপায়ে অনুরূপ ব্যবহার ক্ষেত্রে একটি প্রদত্ত পূর্বাভাস পূরণ করে এমন প্রথম উপাদানটি সরাতে হয়। এটি করার জন্য, index(where:)
Collection
পদ্ধতি (যা অ্যারে সংগ্রহের জন্য সহজেই উপলব্ধ) ব্যবহার করা যেতে পারে প্রথম উপাদানটির পূর্বের পরিসংখ্যানটি সন্ধান করার জন্য, তারপরে সূচকটি remove(at:)
সাথে ব্যবহার করা যেতে পারে remove(at:)
Array
পদ্ধতি (সম্ভাব্য; এটি বিদ্যমান যে দেওয়া) যে উপাদান মুছে ফেলুন।
var elements = ["a", "b", "c", "d", "e", "a", "b", "c"]
if let indexOfFirstSuchElement = elements.index(where: { $0 == "c" }) {
elements.remove(at: indexOfFirstSuchElement)
print(elements) // ["a", "b", "d", "e", "a", "b", "c"]
}
অথবা, যদি আপনি অ্যারে থেকে উপাদানটি সরাতে চান এবং সাথে কাজ করতে চান , তবে Optional
: s map(_:)
পদ্ধতিটি শর্তাধীনভাবে ( .some(...)
জন্য index(where:)
থেকে ফিরে আসবে index(where:)
ফলাফলটি ব্যবহার করুন index(where:)
থেকে index(where:)
অ্যারে থেকে সরানো উপাদান অপসারণ এবং ক্যাপচার (একটি ঐচ্ছিক বাঁধাই অধ্যায় মধ্যে)।
var elements = ["a", "b", "c", "d", "e", "a", "b", "c"]
if let firstSuchElement = elements.index(where: { $0 == "c" })
.map({ elements.remove(at: $0) }) {
// if we enter here, the first such element have now been
// remove from the array
print(elements) // ["a", "b", "d", "e", "a", "b", "c"]
// and we may work with it
print(firstSuchElement) // c
}
উল্লেখ্য, অ্যারের সদস্যদের উপরে উল্লিখিত উদাহরণের মধ্যে সাধারণ মান টাইপ ( String
ইনস্ট্যান্স) রয়েছে, তাই প্রদত্ত সদস্য খুঁজে পেতে একটি পূর্বনির্ধারণ ব্যবহার করে কিছুটা বেশি খুন করা হয়, কারণ আমরা কেবল সহজ index(of:)
পদ্ধতি ব্যবহার করে সমতাটির জন্য পরীক্ষা করতে পারি @ কুককফোজের উত্তর হিসাবে দেখানো হয়েছে। উদাহরণস্বরূপ, Person
উদাহরণের উপরে Person
এবং অপসারণের পদ্ধতিটি প্রয়োগ করলে, তবে পূর্বনির্ধারণের সাথে index(where:)
ব্যবহার করা উপযুক্ত (যেহেতু আমরা আর সমতার জন্য পরীক্ষা করি না তবে সরবরাহকৃত পূর্বাভাস পূরণের জন্য)।
সুইফ্ট 2, 3, 4:
let elements = [1, 2, 3, 4, 5]
if elements.contains(5) {
print("yes")
}
contains()
একটি SequenceType
Equatable
প্রোটোকল এক্সটেনশান পদ্ধতি ( Equatable
উপাদানের ক্রমগুলির জন্য) এবং পূর্ববর্তী সংস্করণের মতো বিশ্বব্যাপী পদ্ধতি নয়।
মন্তব্য:
-
contains()
পদ্ধতির প্রয়োজন হয় যে ক্রম উপাদানগুলিEquatable
প্রোটোকল গ্রহণ করে, যেমনEquatable
উত্তর তুলনা করে। - যদি ক্রম উপাদানগুলি একটি
NSObject
উদাহরণ হয় তবে আপনাকে অবশ্যই ওভাররাইড করতে হবেisEqual:
সুইফ্টে NSObject উপশ্রেণীটি দেখুন : হ্যাশ বনাম হ্যাশ ভ্যালু, isqual vs == । - আরেকটি - আরও সাধারণ -
contains()
পদ্ধতি যা উপাদানগুলি সমান হতে পারে না এবং একটি যুক্তি হিসাবে পূর্বপুরুষের প্রয়োজন হয়, উদাহরণস্বরূপ শর্ট্যান্ড দেখুন যে কোন বস্তু সুইফ্টের জন্য একটি অ্যারের মধ্যে বিদ্যমান কিনা? ।
পুরানো সংস্করণ স্নিফ্ট:
let elements = [1,2,3,4,5]
if contains(elements, 5) {
println("yes")
}