আমরা কীভাবে দ্রুত অগ্রাহ্যকরণের ক্ষেত্রে দুটি স্ট্রিং তুলনা করতে পারি? যেমন:
var a = "Cash"
var b = "cash"
যদি আমরা var a & var b এর তুলনা করি তবে এমন কোনও পদ্ধতি কি সত্য ফিরে আসবে?
আমরা কীভাবে দ্রুত অগ্রাহ্যকরণের ক্ষেত্রে দুটি স্ট্রিং তুলনা করতে পারি? যেমন:
var a = "Cash"
var b = "cash"
যদি আমরা var a & var b এর তুলনা করি তবে এমন কোনও পদ্ধতি কি সত্য ফিরে আসবে?
lowercaseStringকয়েকটি উত্তরে এটি উল্লেখ করা হয়েছে কিছু ভাষায় ব্যর্থ হবে (উদাহরণস্বরূপ স্ট্রাই! = স্ট্র্যাসে)
caseInsensitiveCompare:& localizedCaseInsensitiveCompare:পরিবর্তে
"Straße".localizedCaseInsensitiveCompare("STRASSE")- আমদানির কথা মনে রাখবেন Foundation)
উত্তর:
এটা চেষ্টা কর:
var a = "Cash"
var b = "cash"
let result: NSComparisonResult = a.compare(b, options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil, locale: nil)
// You can also ignore last two parameters(thanks 0x7fffffff)
//let result: NSComparisonResult = a.compare(b, options: NSStringCompareOptions.CaseInsensitiveSearch)
ফলাফলটি এনএসসি তুলনা ফলাফল এনাম:
enum NSComparisonResult : Int {
case OrderedAscending
case OrderedSame
case OrderedDescending
}
সুতরাং আপনি যদি বিবৃতি ব্যবহার করতে পারেন:
if result == .OrderedSame {
println("equal")
} else {
println("not equal")
}
এটা চেষ্টা কর :
পুরানো দ্রুত জন্য:
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
println("voila")
}
সুইফ্ট 3+
var a : String = "Cash"
var b : String = "cash"
if(a.caseInsensitiveCompare(b) == .orderedSame){
print("voila")
}
a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame
caseInsensitiveCompare(_:)সুইফ্ট স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত নয়, বরং এটি Foundationকাঠামোর অংশ , সুতরাং এটি প্রয়োজন import Foundation।
a.lowercased() == b.lowercased()?
ব্যবহার caseInsensitiveCompare পদ্ধতি:
let a = "Cash"
let b = "cash"
let c = a.caseInsensitiveCompare(b) == .orderedSame
print(c) // "true"
তুলনামূলক ফলাফল আপনাকে বলবে যে শব্দটি অভিধানের অর্থে অন্যটির চেয়ে আগে আসে (অর্থাত্ শব্দটি কোনও অভিধানের সামনের দিকে আসে)। .orderedSameমানে স্ট্রিং অভিধানে একই স্পটে শেষ হবে
.orderedSameমানে স্ট্রিং অভিধানে একই স্পটে শেষ হবে।
.orderedSameজন্য সংক্ষিপ্ত ComparisonResult.orderSame... আপনার টাইপটির নাম রাখার দরকার নেই যেহেতু সংকলকটি জানে যে caseInsensitiveCompareএকটি প্রদান করে ComparisonResult। "দুটি অপারেন্ড সমান" - একটি নির্দিষ্ট ক্রম অনুসারে এগুলি সমান ... স্পষ্টতই, "নগদ" এবং "নগদ" অভিন্ন স্ট্রিংয়ের মান নয়। "তবে এখানে 'অর্ডার' শব্দটি কেন ব্যবহৃত হয়েছে?" - কারণ এটি একটি আদেশযুক্ত তুলনার ফলাফল। অন্যান্য মানগুলি orderedAscendingএবং orderedDescending... এটি কেবল একই বা ভিন্নতার প্রশ্ন নয়। "ছোট" হিসাবে: স্ট্রিংগুলি একটি বৃহত বেসের সংখ্যার মতো।
a.caseInsensitiveCompare(b, comparing: .orderedSame)করা আরও পঠনযোগ্য হত ...
if a.lowercaseString == b.lowercaseString {
//Strings match
}
সঠিক পথ:
let a: String = "Cash"
let b: String = "cash"
if a.caseInsensitiveCompare(b) == .orderedSame {
//Strings match
}
দয়া করে নোট করুন: তুলনাআরসাল্ট.অর্ডারসেমকে সংক্ষেপে .orderedSame হিসাবেও লেখা যেতে পারে।
অন্যান্য উপায়:
ক।
if a.lowercased() == b.lowercased() {
//Strings match
}
খ।
if a.uppercased() == b.uppercased() {
//Strings match
}
গ।
if a.capitalized() == b.capitalized() {
//Strings match
}
শুধু আপনার নিজের রোল করতে পারে:
func equalIgnoringCase(a:String, b:String) -> Bool {
return a.lowercaseString == b.lowercaseString
}
লোকালাইজড কেসআইসেনসেটিভ কনটেনস : কেস-সংবেদনশীল, স্থানীয়-সচেতন অনুসন্ধান সম্পাদন করে রিসিভারের প্রদত্ত স্ট্রিং রয়েছে কিনা তা ফেরত দেয়
if a.localizedCaseInsensitiveContains(b) {
//returns true if a contains b (case insensitive)
}
সম্পাদিত :
কেসআইএনসেটিসিভ কম্পেয়ার : একমাত্র বিকল্প হিসাবে এনএসকেসিআইএনসেটিসেটিভ অনুসন্ধানের সাথে তুলনা (_: বিকল্প :) ডেকে আনার ফলাফলটি প্রত্যাবর্তন করে।
if a.caseInsensitiveCompare(b) == .orderedSame {
//returns true if a equals b (case insensitive)
}
আপনি সমস্ত অক্ষর বড় হাতের অক্ষর (বা ছোট হাতের অক্ষর) তৈরি করতে পারেন এবং দেখতে পারেন যে সেগুলি একই কিনা।
var a = “Cash”
var b = “CASh”
if a.uppercaseString == b.uppercaseString{
//DO SOMETHING
}
এটি উভয় ভেরিয়েবল হিসাবে তৈরি করবে ”CASH” এবং এইভাবে তারা সমান।
আপনি একটি Stringএক্সটেনশনও করতে পারেন
extension String{
func equalsIgnoreCase(string:String) -> Bool{
return self.uppercaseString == string.uppercaseString
}
}
if "Something ELSE".equalsIgnoreCase("something Else"){
print("TRUE")
}
সুইফট 4, আমি স্ট্রিং এক্সটেনশান রুটে কেসআইএনসেটিসিটিকম্পার () কে টেমপ্লেট হিসাবে ব্যবহার করেছিলাম (তবে অপারেন্ডটিকে optionচ্ছিক হতে দিচ্ছি)। এখানে খেলার মাঠটি আমি এটি একসাথে রাখতাম (স্বাগতের তুলনায় সুইফ্টে নতুন তাই প্রতিক্রিয়া)।
import UIKit
extension String {
func caseInsensitiveEquals<T>(_ otherString: T?) -> Bool where T : StringProtocol {
guard let otherString = otherString else {
return false
}
return self.caseInsensitiveCompare(otherString) == ComparisonResult.orderedSame
}
}
"string 1".caseInsensitiveEquals("string 2") // false
"thingy".caseInsensitiveEquals("thingy") // true
let nilString1: String? = nil
"woohoo".caseInsensitiveEquals(nilString1) // false
.orderedSameবরং ব্যবহার করতে পারেন ComparisonResult.orderedSame।
কোডের কয়েকটি লাইনের তুলনায় আপনি কেবল আপনার স্ট্রিং এক্সটেনশন লিখতে পারেন
extension String {
func compare(_ with : String)->Bool{
return self.caseInsensitiveCompare(with) == .orderedSame
}
}
সুইফ্ট 5 এর জন্য কেস উপেক্ষা করে দুটি স্ট্রিং তুলনা করুন
var a = "cash"
var b = "Cash"
if(a.caseInsensitiveCompare(b) == .orderedSame){
print("Ok")
}
সুইফট 3
if a.lowercased() == b.lowercased() {
}
সুইফট 3 : আপনি আপনার নিজের অপারেটর, যেমন বর্ণনা করতে পারেন ~=।
infix operator ~=
func ~=(lhs: String, rhs: String) -> Bool {
return lhs.caseInsensitiveCompare(rhs) == .orderedSame
}
যা আপনি তখন কোনও খেলার মাঠে চেষ্টা করতে পারেন
let low = "hej"
let up = "Hej"
func test() {
if low ~= up {
print("same")
} else {
print("not same")
}
}
test() // prints 'same'
Stringঅন্যের (বা অন্যান্য Stringআক্ষরিক) সাথে মিলের ক্ষেত্রে ব্যবহৃত নেটিভ প্যাটার্ন ম্যাচের চেয়ে বেশি অগ্রাধিকার গ্রহণ করবে । কল্পনা করুন let str = "isCAMELcase"নিম্নরূপ একটি মামলা দিয়ে সুইচ হচ্ছে: case "IsCamelCase": ... । উপরের পদ্ধতিটির সাথে, এটি caseসফলভাবে প্রবেশ করা হবে, যা Stringপ্যাটার্ন মিলের মানক libs বাস্তবায়ন থেকে প্রত্যাশিত নয় । আপডেট হওয়া সুইফ্ট 3 উত্তরটি এখনও ভাল তবে ...
Stringডিফল্ট Stringপ্যাটার্ন ম্যাচটিকে ওভাররাইড না করে উপরের সাহায্যকারী হিসাবে একটি কাস্টম ফাংশন (বা এক্সটেনশন) ব্যবহার করার বিষয়টি বিবেচনা করুন ।
extension String
{
func equalIgnoreCase(_ compare:String) -> Bool
{
return self.uppercased() == compare.uppercased()
}
}
ব্যবহারের নমুনা
print("lala".equalIgnoreCase("LALA"))
print("l4la".equalIgnoreCase("LALA"))
print("laLa".equalIgnoreCase("LALA"))
print("LALa".equalIgnoreCase("LALA"))
সুইফট 3:
আপনি দুটি স্ট্রিং ফাংশনের মধ্যে স্থানীয় বর্ণিত কেস সংবেদনশীল তুলনাটি ব্যবহার করতে পারেন এবং এটি ফিরে আসে Bool
var a = "cash"
var b = "Cash"
if a.localizedCaseInsensitiveContains(b) {
print("Identical")
} else {
print("Non Identical")
}