我将如何进行以下操作:
示例(不正确)代码:
@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,元素添加两次。我只希望它添加一次。
答案 0 :(得分:1)
首先,不需要检查@tag1
是否存在,因为nil == 'SomeValue'
是false
。
如果我理解你的问题,这里有解决方案:
使用Set
代替Array
。 Set
中的项目始终是唯一的。
set = Set.new
@array1.each do |element|
if @tag1 == @value1 && @tag2 == @value2 && @tag3 == @value3 && @tag4 == @value4
set << element
end
end
@array2 = set.to_a