2012-12-11 15 views
22

Właśnie zacząłem uczyć się ruby ​​i jest to prawdopodobnie bardzo łatwe do rozwiązania. Jak porównać dwa ciągi w Ruby?Porównywanie dwóch ciągów ruby ​​

Próbowałem następujące:

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

Kiedy próbuję echo ich pocieszyć, więc mogę porównać wartości wizualnie, mogę to zrobić:

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

Ostatecznie są te różne rodzaje ciągi jak je porównać?

+0

możliwe duplikat [porównywania ciągów Ruby] (http://stackoverflow.com/questions/426159/comparing-strings-in -ruby) – JaredMcAteer

Odpowiedz

7

Z tego, co wydrukowano, wynika, że ​​var2 to tablica zawierająca jeden ciąg znaków. Lub faktycznie wydaje się, że wynik działania .inspect na tablicy zawierającej jeden ciąg znaków. Byłoby pomocne, aby pokazać, jak je inicjujesz.

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 jest regularny ciąg, natomiast var2 jest tablicą, to jak należy porównać (w tym przypadku):

puts var1 == var2[0] 
+0

lub 'var2.first' lub' var2.shift'. –

+1

Jeśli chcesz być agnostykiem na typie, '[* var1] .join == [* var2] .join' – histocrat

+0

@ histocrat Zakładając, że tablica ma pojedynczy element lub próbujesz porównać pojedynczy ciąg z tablicą ciągi, twój komentarz ma sens. Jednak nie są to bardzo typowe operacje. – Anthony

4

Porównanie strun jest bardzo łatwy w Ruby:

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

Upewnij się, że twój var2 nie jest tablicą (która wydaje się być podobna)

78

Oto niektóre:

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

kosmicznym (<=>) metoda może być stosowana do porównywania dwóch ciągów w stosunku do ich rankingu alfabetycznej. < => 0, jeżeli sposób powraca ciągi są identyczne, -1, gdy łańcuch z lewej strony jest mniejsza niż ciąg prawej, a 1 jeżeli jest ona większa:

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

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

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

Przypadek niewrażliwe porównania można przeprowadzić, stosując Sposób casecmp która zwraca te same wartości jak < => sposób opisany powyżej:

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

powinno to być oznaczone jako poprawna odpowiedź. – abbood

+0

W jaki sposób dokonujemy porównania, ignorując przypadek? – stack1

+0

@ stack1 "Jabłka" .to_lower <=> "jabłka" .to_lower –

Powiązane problemy