Ruby 一次就可以完成吗?
我已经写了上面的内容,但我发现它既丑陋又臃肿。在一个单独的语句中必须有一种简洁的方法来实现这一点。。但是怎么做呢?这应该是等效的:Ruby 一次就可以完成吗?,ruby,Ruby,我已经写了上面的内容,但我发现它既丑陋又臃肿。在一个单独的语句中必须有一种简洁的方法来实现这一点。。但是怎么做呢?这应该是等效的: while(i < bArray.length) if(aArray.include?(bArray[i]) == false) then return false end i+=1 end while i < bArray.length return false unless aArray.include?(bArray[i]
while(i < bArray.length)
if(aArray.include?(bArray[i]) == false) then
return false
end
i+=1
end
while i < bArray.length
return false unless aArray.include?(bArray[i])
i += 1
end
看起来你想知道aArray是否包含bArray的所有元素
bArray.all?(&aArray.method(:include?))
我仔细看了看原始代码,它有一个逻辑炸弹滴答作响:
aArray = %w[a b c d]
bArray = %w[a b c z]
(bArray - aArray).empty? # => false
或:
与之相比:
if (cmp_array( %w[ a b c ], %w[ a b c d ]).false?) ...
它始终返回true/false。省略了返回sorry。如果字符不存在,我将返回false。如果多个字符同时得到相同的解决方案,这总是一个好迹象。这通常是一个非常好的解决方案,或者是一个非常微妙的错误解决方案:-为了清晰和一致,也许还可以用英语写出预期的行为。这将有助于匹配以下替代方法。例如,i的确切最终结果可能很重要,它似乎只是一个临时变量。也可能不是。或者,如果输入出现偏差,则可能期望其提前偏离。也可能不是。添加的细节(例如“不这样做”)也可以提升为问题标题,以创建更好的帖子。在Ruby中,您通常使用snake_case而不是camelCase。
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
if (cmp_array( %w[ a b c ], %w[ a b c ]).nil?) ...
if (cmp_array( %w[ a b c ], %w[ a b c d ]).false?) ...
if (cmp_array2( %w[ a b c ], %w[ a b c ])) ...