我有以下格式的数据
"stats": {
"team": [],
"outcome": [],
"rank": []
}
我需要确定上述结构中是否存在 2 个或更多结果的组合,然后打印一些内容。
所以思路是:
(if stats.team.present? && if stats.outcome.present) || (if stats.outcome.present? && if stats.rank.present) || (if stats.team.present? && if stats.rank.present)
更好的方法是创建一个方法来添加一个计数器,如果团队、结果、等级的计数大于 0,该计数器就会递增。
然后检查计数器是否大于 2。 例如:
def my_count
count = 0
count += 1 if stats.team.count > 0
count += 1 if stats.outcome.count > 0
count += 1 if stats.rank.count > 0
if count > 1
return true
end
end
这些是唯一的 2 个选项还是有更简洁的方法?
最佳答案
Are these the only 2 options or is there a cleaner way?
吨 更简洁的方式,但最好的方式将使用 many?
, ActiveSupport 的一部分。
many?
本质上类似于 any?
,但不是询问“一个或多个”是否满足条件,而是询问是否两个或更多。这是迄今为止您的问题在语义上最正确的实现:
stats = { team: [], outcome: [], rank: [] }}
stats.many? { |k,v| v.present? } # false
stats = { team: [1], outcome: [1], rank: [] }}
stats.many? { |k,v| v.present? } # true
你可以更聪明地使用 stats.values
和 Symbol#to_proc
来进一步缩短它,但我认为没有必要:
stats.values.many?(&:present?)
关于ruby-on-rails - 基于特定组合的 ruby 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343409/