我有一個陣列,pipes其中有以下屬性:pipe_id grade和grade_confidence.
我希望在陣列中查找與具有相同 ID 的其他物件具有相同屬性的物件。我一直在使用 group_by 和 transform_values 來查找只有一個等級的 ID - 效果很好(感謝使用 group_by 中的答案僅用于某些屬性)。但是,如果可能的話,我仍然希望將 Grade_confidence 保留在最終結果中。
class Pipes
attr_accessor :pipe_id, :grade, :grade_confidence
def initialize(pipe_id, grade, grade_confidence)
@pipe_id = pipe_id
@grade = grade
@grade_confidence = grade_confidence
end
end
pipe1 = Pipes.new("10001", "60", "A")
pipe2 = Pipes.new("10001", "60", "A")
pipe3 = Pipes.new("10001", "3", "F")
pipe4 = Pipes.new("1005", "15", "A")
pipe5 = Pipes.new("1004", "40", "A")
pipe6 = Pipes.new("1004", "40", "B")
pipes = []
pipes.push(pipe1, pipe2, pipe3, pipe4, pipe5, pipe6)
# We now have our array of pipe objects.
non_dups = pipes.group_by(&:pipe_id).transform_values { |a| a.map(&:grade).uniq }.select { |k,v| v.size == 1 }
puts non_dups
# => {"1005"=>["15"], "1004"=>["40"]}
想要的
上面做了我想要的 - 因為“10001”有兩個不同的grades,它被忽略,并且“1004”和“1005”每個 ID 具有相同的等級。但我想要的是保留grade_confidence太,或者也包括grade_confidence基于條件。
例如,如果grade_confidence是== "B"最終結果將是# => {"1004"=>["40", "B"]}
或者
如果grade_confidence是== "A"最終結果將是# => {"1005"=>["15", "A"], "1004"=>["40", "A"]}
是否可以調整 transform_values 以允許這樣做,或者我需要走另一條路線?
謝謝
uj5u.com熱心網友回復:
你需要更新它:
non_dups = pipes
.group_by(&:pipe_id)
.transform_values { |a| [a.map(&:grade).uniq, a.map(&:grade_confidence)]}
.select { |_, (grades, _confidences)| grades.size == 1 }
.transform_values {|grades, confindeces| [grades.first, confindeces.sort.first]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383472.html
