45

我刚刚开始学习 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

最终这些不同类型的字符串我该如何比较这两者?

4

4 回答 4

107

这里有一些:

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

spaceship ( <=>) 方法可用于比较两个字符串的字母顺序。如果字符串相同,<=> 方法返回 0,如果左侧字符串小于右侧字符串,则返回 -1,如果大于右侧字符串,则返回 1:

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

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

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

可以使用 casecmp 方法执行不区分大小写的比较,该方法返回与上述 <=> 方法相同的值:

"Apples".casecmp "apples"
=> 0
于 2012-12-11T16:45:04.267 回答
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"]
于 2012-12-11T16:36:16.990 回答
7

var1是一个常规字符串,而var2是一个数组,这是你应该比较的方式(在这种情况下):

puts var1 == var2[0]
于 2012-12-11T16:36:28.227 回答
6

在 Ruby 中比较字符串非常简单:

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

确保您的 var2 不是数组(看起来像)

于 2012-12-11T16:36:41.450 回答