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   ])) ...