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


উত্তর:


273

আপনি খুঁজছেন casecmp0যদি দুটি স্ট্রিং সমান হয়, সংবেদনশীলভাবে 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.