在 Rails 中为 Hash 中的一个值设置两个键

问题描述 投票:0回答:1

假设我有一个哈希:

{
  first: :value1,
  second: :value1,
  third: :value2 
}

.map
期间,我需要消除重复项,因此它应该只是
first
second
。是否可以有一些解决方法,例如:

{
  (:first || :second) => :value1,
  third: :value2 
}

如果不是,如何根据条件删除哈希中的重复键?是否可以将条件传递到

.uniq
块中?

谢谢,

ruby-on-rails ruby hash ruby-on-rails-5
1个回答
1
投票

是的,可以将块传递给

#uniq
方法。

https://ruby-doc.org/3.2.2/Enumerable.html#method-i-uniq

您可以应用以下内容:

hash.uniq { |_k, v| v }

或更短:

hash.uniq(&:last)

此外,如果您不需要键,另一个正确的解决方案是简单地获取值:

hash.values.uniq

您的第二个建议是有效的 Ruby 代码,但不正确,因为它删除了一个键并评估为以下内容:

irb(main):004:0> {
  (:first || :second) => :value1,
  third: :value2
}
=> {:first=>:value1, :third=>:value2}
© www.soinside.com 2019 - 2024. All rights reserved.