while(i < bArray.length)
if(aArray.include?(bArray[i]) == false) then
return false
end
i+=1
end
Run Code Online (Sandbox Code Playgroud)
我已经写了上面的内容,但我觉得它很丑陋.在一个声明中必须有一个干净的方法来做到这一点..但是如何?
这应该是等价的:
while i < bArray.length
return false unless aArray.include?(bArray[i])
i += 1
end
Run Code Online (Sandbox Code Playgroud)
这是一个我认为应该相同的单线程:
bArray.all? { |item| aArray.include?(item) }
Run Code Online (Sandbox Code Playgroud)
看起来你正试图找出aArray是否包含bArray的所有元素.
aArray = %w[a b c d]
bArray = %w[a b c z]
(bArray - aArray).empty? # => false
Run Code Online (Sandbox Code Playgroud)
我仔细看了一下原始代码,它有一个逻辑炸弹滴答作响:
def cmp_array(aArray, bArray)
i = 0
while (i < bArray.length)
if (aArray.include?(bArray[i]) == false) then
return false
end
i += 1
end
end
def cmp_array2(a, b)
(b - a).empty?
end
cmp_array( %w[ a b c ], %w[ a b c ]) # => nil
cmp_array( %w[ a b c ], %w[ c b a ]) # => nil
cmp_array( %w[ a b c ], %w[ a b ]) # => nil
cmp_array( %w[ a b c ], %w[ a b c d ]) # => false
cmp_array( %w[ a b ], %w[ a b c ]) # => false
cmp_array2( %w[ a b c ], %w[ a b c ]) # => true
cmp_array2( %w[ a b c ], %w[ c b a ]) # => true
cmp_array2( %w[ a b c ], %w[ a b ]) # => true
cmp_array2( %w[ a b c ], %w[ a b c d ]) # => false
cmp_array2( %w[ a b ], %w[ a b c ]) # => false
Run Code Online (Sandbox Code Playgroud)
我不得不添加i = 0初始化程序,否则Ruby抱怨未初始化的变量.
请注意,cmp_array返回nil或false,强制执行其他测试nil?或false?执行有用的操作.
if (cmp_array( %w[ a b c ], %w[ a b c ]).nil?) ...
Run Code Online (Sandbox Code Playgroud)
要么:
if (cmp_array( %w[ a b c ], %w[ a b c d ]).false?) ...
Run Code Online (Sandbox Code Playgroud)
相比:
if (cmp_array2( %w[ a b c ], %w[ a b c ])) ...
Run Code Online (Sandbox Code Playgroud)
它始终如一地返回真/假.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |