如何按值的数量找到哈希中的键? (红宝石)

时间:2017-07-07 22:27:46

标签: ruby hash

我想通过散列搜索只有一个值的键,然后将该值除以2.我该怎么做?

实施例

hash = { a => [4], b => [2, 4, 5], c => [3, 5] }

寻求结果

hash = { a => [2], b => [2, 4, 5], c => [3, 5] }

2 个答案:

答案 0 :(得分:2)

Sub createfolder_excel()

    Dim oInbox  As Outlook.MAPIFolder
    Dim oSearch As Outlook.Search

    Set oInbox = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(Outlook.olFolderInbox).Parent.Folders("Fin Reporting").Folders("July")
    Set oSearch = Outlook.Application.AdvancedSearch("'" & oInbox.FolderPath & "'")

    oSearch.Save ("TestSearch")

End Sub

您可以使用hash = {:a=>[4], :b=>[2, 4, 5], :c=>[3, 5]}

transform_values

hash.transform_values { |v| v.one? ? [v[0]/2.0] : v } #=> {:a=>[2.0], :b=>[2, 4, 5], :c=>[3, 5]}

map

答案 1 :(得分:1)

这应该可以解决问题,只需迭代每个键/值对并检查值的长度,如果它只有1项,则将哈希中的键设置为等于原始值的一半。

hash = { a: [4], b:  [2, 4, 5], c: [3, 5] }
# => {:a=>[4], :b=>[2, 4, 5], :c=>[3, 5]}

hash.each do |key, values|
  if 1 == values.length
    hash[key] = [values.first / 2]
  end
end
# => {:a=>[2], :b=>[2, 4, 5], :c=>[3, 5]}