ruby - 多个if语句(如果定义了@var)

时间:2016-04-21 07:24:49

标签: ruby

我将如何进行以下操作:

  • 接受用户输入,可以是任意数量的'标签'
  • 为每个标记评估是否定义了@tag,如果是,则是否相等
  • 如果上述条件通过,则添加到数组

示例(不正确)代码:

@array1.each do |element|
    if ( @tag1 && ( @tag1 == @value1 ) ) &&
    if ( @tag2 && ( @tag2 == @value2 ) ) &&
    if ( @tag3 && ( @tag3 == @value3 ) ) &&
    if ( @tag4 && ( @tag4 == @value4 ) )
    @array2 << element
end

我想将element添加到数组中,但仅限于每个标记都已定义,并且仅在@tag == @value时。例如:

如果定义了@ tag2,并且@ tag2 == @ value2 AND 如果定义了@ tag3,那么@ tag3 == @ value3

element添加到数组中。

以上代码会添加element 两次,我只想添加一次。

我如何做到这一点?

由于

编辑:

标记和值不是数组的一部分。他们正在使用ruby aws-sdk。也许为了清楚起见,element将是AWS实例的instance-id。该实例将有一系列标签。我想返回一个实例id,如果它有一个标签(作为ruby script.rb --tag1传入),并且只有tag1 == value1(ruby script.rb --tag1 value1)。但是,如果找到其他标签,我希望这种情况发生。

问题是如果传入2个tages:

ruby script.rb --tag1 value1 --tag2 value2

然后     if ( @tag1 && ( @tag1 == @value1 ) ) && 是的,是的     if ( @tag2 && ( @tag2 == @value2 ) ) && 为TRUE,元素添加两次。我只希望它添加一次。

1 个答案:

答案 0 :(得分:1)

首先,不需要检查@tag1是否存在,因为nil == 'SomeValue'false

如果我理解你的问题,这里有解决方案:

使用Set代替ArraySet中的项目始终是唯一的。

set = Set.new
@array1.each do |element|
  if @tag1 == @value1 && @tag2 == @value2 && @tag3 == @value3 && @tag4 == @value4
    set << element
  end
end

@array2 = set.to_a