কেসটিকে উপেক্ষা করে স্ট্রিংগুলির তুলনা কীভাবে করা যায়


উত্তর:


273

আপনি খুঁজছেন casecmp। 0যদি দুটি স্ট্রিং সমান হয়, সংবেদনশীলভাবে It

str1.casecmp(str2) == 0

"Apple".casecmp("APPLE") == 0
#=> true

বিকল্পভাবে, আপনি উভয় স্ট্রিংকে লোয়ার কেসে রূপান্তর করতে পারেন ( str.downcase) এবং সমতার জন্য তুলনা করতে পারেন ।


19
আমার মানদণ্ড থেকে কেসক্যাম্প ডাউনসেস পদ্ধতির চেয়ে কমপক্ষে দ্বিগুণ দ্রুত
— জ্যাকব

77
casecmp: একটি কেস ইন- সংবেদনশীল তুলনা পদ্ধতির একটি নির্বোধ নাম ?!
— জাবাবা

4
@ জাবা: লিবিসি লোকদের দোষ দিন: pubs.opengroup.org/onlinepubs/9699919799/function/…
— খুব ছোট

17
আপনি শব্দের ব্যবহার যদি চান তাহলে, প্রতিস্থাপন করতে পারেন == 0সঙ্গেzero?
— অ্যান্ড্রু গ্রিম

3
আপনি যদি অভিযোগ না দেওয়ার জন্য রুবোকপকে সঠিক উপায়ে ব্যবহার করেন "Apple".casecmp("APPLE").zero?তবে ব্যক্তিগতভাবে আমি নীচে আন্দ্রেসের উত্তরটি পছন্দ করি, যা ব্যবহার করে.casecmp?
— 8

45

ইন রুবি 2.4.0 আপনি:casecmp?(other_str) → true, false, or nil

"abcdef".casecmp?("abcde")     #=> false
"aBcDeF".casecmp?("abcdef")    #=> true
"abcdef".casecmp?("abcdefg")   #=> false
"abcdef".casecmp?("ABCDEF")    #=> true

এখানে আপনার আরও তথ্য আছে


3
পদ্ধতির একটি ভাল উন্নতি তবে এটি আমি দেখা সর্বনিম্ন "রুবি সাউন্ডিং" পদ্ধতিগুলির মধ্যে একটি। মনে হচ্ছে আমি এই casecmpজাঙ্কটি দিয়ে জাভা ব্যবহার করছি ।
— জোশুয়া পিন্টার 4'19

আমি সত্যিই আপনি "aBcDeF".downcase == "abcdef"পরিবর্তে ব্যবহার করার পরামর্শ দিচ্ছি । আরও অনেক পাঠযোগ্য এবং ব্যবহারের পারফরম্যান্সের লাভগুলি casecmpরুবি ২.৪++ এ মুছে ফেলা হয়েছে।
— জোশুয়া পিন্টার

অপেক্ষা করুন, এই জাতীয় API এর মধ্যে falseএবং এর মধ্যে তফাত কী হবে nil...
— ট্রেজকাজ

দস্তাবেজ অনুসারে শূন্যস্থানটি যখন ফিরে আসে যখন অন্য_স্ট্রির স্ট্রিং হয় না
— র‌্যাম্পলেক্স

8

আপনি যদি ইউটিএফ -8 স্ট্রিংকে উপেক্ষা করার ক্ষেত্রে তুলনা করতে চান তবে:

>> str1 = "Мария"
=> "Мария"
>> str2 = "мария"
=> "мария"
>> str1.casecmp(str2) == 0
=> false
>> require 'active_support/all'
=> true
>> str1.mb_chars.downcase.to_s.casecmp(str2.mb_chars.downcase.to_s) == 0
=> true

এটি রুবি ২.৩.১ এবং পূর্ববর্তী সংস্করণগুলিতে এইভাবে কাজ করে।

ছোট মেমরির পদচিহ্নগুলির জন্য আপনি চেরি বাছাই করতে পারেন string/multibyte:

require 'active_support'
require 'active_support/core_ext/string/multibyte'

সম্পাদনা করুন , রুবি ২.৪.০:

>> str1.casecmp(str2) == 0
=> false

সুতরাং casecmp2.4.0 এ কাজ করে না; তবে ২.৪.০-তে কেউ ইউটিএফ -8 স্ট্রিংকে active_supportমণি ছাড়াই ম্যানুয়ালি তুলনা করতে পারেন :

>> str1.downcase == str2.downcase
=> true

5

কেসক্যাম্প এবং শূন্য? রুবি ইনবিল্ট পদ্ধতি। কেসক্যাম্প 0 প্রদান করে যদি দুটি স্ট্রিং সমান হয়, সংবেদনশীল এবং শূন্য হয়? শূন্য মানের জন্য চেক (== 0)

str1.casecmp(str2).zero?

এটি আমার স্টাইল চেকার আমাকে বলেছিল এবং আমি এটি পছন্দ করি কারণ এটি আক্ষরিকের সাথে তুলনা করার চেয়ে স্পষ্ট 0, বিশেষত যখন আরও জড়িত শর্তের সাথে বাসা বেঁধে থাকে।
— আমোস শাপিরা

5

রুবি 2.4 কাজ জরিমানা কেসক্যাম্পের জন্য? utf-8 স্ট্রিংয়ের জন্য (এমবি_চার্স প্রয়োজন নেই):

2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
 => true

তবে কেসসিএমপি 8-এর জন্য কাজ করছে না:

2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
 => 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
 => 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.