检查是否包含阵列的一部分

时间:2014-09-12 14:47:23

标签: ruby arrays

假设我有一个数组:

newArray = Array.[] 

然后我推了一些字符串:

newArray.push 'nil'  
newArray.push 'nil2'  
newArray.push 'nil3' 

现在我做一个while循环:

while true  
    load = gets.chomp

    if newArray[].include? load  
        puts 'That pieace of the Array is loaded' 
        break 
    end  
end

部分if newArray[].include? load错了,我知道。但是我怎么能这样做才能起作用呢?

1 个答案:

答案 0 :(得分:3)

您的问题令人困惑,您的代码不是惯用的Ruby。考虑写它:

new_array = []
new_array << 'nil'
new_array << 'nil2'
new_array << 'nil3'

loop do
  load = gets.chomp

  if new_array.include? load
    puts 'That piece of the Array is loaded'
    break
  end
end
  • 我们使用snake_case_for_variables,因为ItIsALotEasierToRead。
  • 虽然我们可以Array.newArray.[],但我们很少这样做。我们通常会将[]分配给变量。
  • 我们通常使用push <<到数组。它的输入时间更短,并在视觉上区分发生的事情。
  • 使用loop do代替while true

在定义该数组时,我实际上更直接:

new_array = %w[nil nil2 nil3]

我会使用更多的助记符变量名,因此代码更自我记录:

ary = %w[nil nil2 nil3]

loop do
  user_input = gets.chomp

  if ary.include? user_input
    puts 'That piece of the Array is loaded'
    break
  end
end

如果要查看输入的值是否是数组中字符串元素的一部分:

if ary.any? { |s| s[user_input] }
  puts 'That piece of the Array is loaded'
  break
end

如果要查看输入的值是否是数组中字符串元素的最后一个字符:

if ary.any? { |s| s[-1] == user_input }

或:

if ary.any? { |s| s[/#{ user_input }$/] }

阅读the documentation for any?以了解它正在做什么。