2012-12-11 16 views
22

में दो स्ट्रिंग की तुलना में मैंने अभी रूबी सीखना शुरू कर दिया है और यह हल करना शायद बहुत आसान है। मैं रुबी में दो तारों की तुलना कैसे करूं?रूबी

मैं कोशिश की है निम्नलिखित:

puts var1 == var2 //false, should be true (I think) 
puts var1.eql?(var2) //false, should be true (I think) 

मैं उन्हें प्रतिध्वनित करने के लिए सांत्वना देने तो मैं मान नेत्रहीन तुलना कर सकते हैं प्रयास करते हैं, मैं यह कर:

puts var1 //prints "test content" without quotes 
puts var2 //prints ["test content"] with quotes and braces 

अंततः के इन विभिन्न प्रकार हैं मैं इन दोनों की तुलना कैसे करूं?

+0

[रूबी में तार की तुलना करना] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/426159/comparing-strings-in: casecmp तरीका है जिसके < मान जैसे ही रिटर्न => उपर्युक्त विधि -रूबी) – JaredMcAteer

उत्तर

7

आपके द्वारा मुद्रित किए गए से, ऐसा लगता है कि var2 एक स्ट्रिंग वाला एक सरणी है। या वास्तव में, यह एक स्ट्रिंग युक्त सरणी पर .inspect चलाने का परिणाम धारण करता प्रतीत होता है। यह दिखाने में मददगार होगा कि आप उन्हें कैसे शुरू कर रहे हैं।

irb(main):005:0* v1 = "test" 
=> "test" 
irb(main):006:0> v2 = ["test"] 
=> ["test"] 
irb(main):007:0> v3 = v2.inspect 
=> "[\"test\"]" 
irb(main):008:0> puts v1,v2,v3 
test 
test 
["test"] 
7

var1 एक नियमित स्ट्रिंग है, जबकि var2 एक सरणी है, यह कैसे आप (इस मामले में) की तुलना करनी चाहिए है:

puts var1 == var2[0] 
+0

या 'var2.first' या' var2.shift'। –

+1

यदि आप टाइप पर अज्ञेयवादी होना चाहते हैं, तो '[* var1] .join == [* var2] .join' – histocrat

+0

@ हिस्टोक्रेट मान लें कि सरणी में एक तत्व है या आप एक स्ट्रिंग की तुलना करने की कोशिश कर रहे हैं तार, आपकी टिप्पणी समझ में आता है। हालांकि, वे बहुत ही सामान्य संचालन नहीं हैं। – Anthony

4

तार की तुलना रूबी में बहुत आसान है:

v1 = "string1" 
v2 = "string2" 
puts v1 == v2 # prints false 
puts "hello"=="there" # prints false 
v1 = "string2" 
puts v1 == v2 # prints true 

सुनिश्चित करें कि आपका var2 एक सरणी नहीं है (जो ऐसा लगता है)

78
"Ali".eql? "Ali" 
=> true 

अंतरिक्ष यान (<=>) विधि उनके वर्णमाला रैंकिंग के संबंध में दो स्ट्रिंग तुलना करने के लिए इस्तेमाल किया जा सकता:यहाँ कुछ कर रहे हैं। < => विधि रिटर्न 0 यदि तार समान हैं, -1 अगर बाएं हाथ स्ट्रिंग दाहिने हाथ स्ट्रिंग की तुलना में कम है, और 1 यह अधिक है:

"Apples" <=> "Apples" 
=> 0 

"Apples" <=> "Pears" 
=> -1 

"Pears" <=> "Apples" 
=> 1 

एक केस संवेदी तुलना किया जा सकता है का उपयोग करते हुए

"Apples".casecmp "apples" 
=> 0 
+2

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए – abbood

+0

हम मामले को अनदेखा करके तुलना कैसे कर सकते हैं? – stack1

+0

@ stack1 "सेब" .to_lower <=> "सेब" .to_lower –