如何将"string1"
与["string1"]
进行比较?以下结果为false
:
params[:abc] # => "neon green"
@abc # => ["neon green"]
params[:abc] == @abc # => false
答案 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