2012-12-11 224 views
22

我剛開始學習ruby,這可能很容易解決。我如何比較Ruby中的兩個字符串?比較ruby中的兩個字符串

我已經試過如下:

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 =>方法如上所述-ruby) – 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

@histocrat假設數組只有一個元素,或者你試圖將一個字符串與字符串,你的評論是有道理的。雖然這些不是很典型的操作。 – Anthony

4

字符串的比較是很容易在Ruby中:

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 –