在Ruby中比较两个字符串

49

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

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


可能是比较Ruby中的字符串的重复问题。 - JaredMcAteer
4个回答

109

这里有一些:

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

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

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

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

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

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

"Apples".casecmp "apples"
=> 0

4
这应该被标记为正确答案。 - abbood
如何进行不区分大小写的比较? - stack1
"Apples".to_lower <=> "apples".to_lower 的翻译是:将“Apples”转换为小写后与将“apples”转换为小写后进行比较。 - dev_row
这个能处理像'a+'、'a'和'a-'这样的字符串吗? - SirFunkButter

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]

返回已转换的文本:或var2.firstvar2.shift - the Tin Man
1
如果你想在类型上保持中立,[*var1].join == [*var2].join - histocrat
假设该数组只有一个元素,或者您正在尝试将单个字符串与字符串数组进行比较,那么您的评论是有道理的。不过,这些并不是非常典型的操作。 - Anthony

6

Ruby中字符串的比较非常容易:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接