2016-04-21 69 views
-1

我怎麼會去這樣做如下:紅寶石 - 多if語句(如果@var定義)

  • 記錄用戶的輸入,可以是任何評估數的「標籤」
  • ,每個標籤如果@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 == @值2與 如果@ TAG3被定義,並且@ TAG3 == @值3

添加element到陣列。

上面的代碼將添加element兩次,我只希望它添加一次。

我該如何做到這一點?

由於

編輯:

標籤和值不是一個陣列的一部分。他們正在使用ruby aws-sdk。也許要說清楚,element將是AWS實例的實例標識。實例上會有一系列標籤。我只想返回一個實例ID,如果它有一個標記(作爲ruby script.rb --tag1傳入),並且僅當tag1 == value1(ruby script.rb --tag1 value1)時才返回。不過,如果發現其他標籤,我希望發生這種情況。

的問題是,如果2個每日新聞在通過:

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

然後 if (@tag1 && (@tag1 == @value1)) && 是TRUE,並且 if (@tag2 && (@tag2 == @value2)) && 是TRUE,元素添加兩次。我只希望它添加一次。

+0

如果您還可以添加'@ array1','@ tag *'和'@ value *'的值,您想實現的內容將會更加清晰。 – Uzbekjon

+0

瞭解,但值來自API調用,我不能在這裏演示。我希望有人能看到邏輯中的錯誤。我可以嘲笑一些示例值,但如果這有助於 – user6127511

+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