比较字符串和数组

时间:2015-03-15 05:52:48

标签: ruby

如何将"string1"["string1"]进行比较?以下结果为false

params[:abc]         # => "neon green"
@abc                 # => ["neon green"]  
params[:abc] == @abc # => false

5 个答案:

答案 0 :(得分:3)

您可以使用Array#include?。但是,如果数组包含" string1"这将返回true。和" string2"。

["string1"].include?("string1")            # => true
["string1", "string2"].include?("string1") # => true

如果您要比较数组只包含字符串,我建议使用Array方法,将提供给它的参数转换为数组。

Array(["string1"]) == Array("string1")            # => true
Array(["string1", "string2"]) == Array("string1") # => false

工作原理:

Array(["string1"]) # => ["string1"]
Array("string1") # => ["string1"]
Array(nil) # => []

答案 1 :(得分:1)

你可以将第二个包装在一个数组中,或者从数组中提取字符串

[params[:abc]] == @abc

params[:abc] == @abc.first

我有点像第一个

答案 2 :(得分:1)

另一种选择 - 将字符串放在其自身的数组中:

[params[:abc]] == @abc # => true

或者,如果您不知道哪一个是数组,请使用array-splat([*])组合:

[*params[:abc]] == [*@abc] # => true

Array-splat的工作方式与@ Jkarayusuf Array()类似:

[*["string1"]] # => ["string1"]
[*"string1"] # => ["string1"]
[*nil] # => []

答案 3 :(得分:0)

我做:

@abc = @abc.join('')
#=> "neon green"

if params[:abc] == @abc
   do thing 1
else
   do thing 2
end

答案 4 :(得分:0)

试试这个

params[:abc].in? @abc