如果有多個值保存到鍵中,我試圖找出是否可以按特定值對哈希進行排序。
示例代碼:
{
key1: ["Value1", "Value2", "Value3"],
key2: ["Value1", "Value2", "Value3"],
key3: ["Value1", "Value2", "Value3"]
}
我希望能夠按其中的值Value2或按Value1任何特定值進行排序。
如果key1和key2相同Value2,它們將回傳為:
{Value2: [key1, key2]}
例子:
Value2代表寵物:
- 對于所有
Value2有狗的人,密鑰將保存在一個新的密鑰下,狗。 - 對于所有
Value2擁有 cat 的人,它將收集所有擁有 cat 的密鑰Value2并將其分組。
{cat: ["key1", "key2"], dog: ["key3"]}
我正在使用 Ruby 和 VScode。我不想使用陣列或嵌套陣列,因為這效率不高。
給定
{
key1: ["Cop", "dog", "house"],
key2: ["doctor", "cat", "apartment"],
key3: ["Chef", "dog", "house"],
key4: ["Cop", "cat", "apartment"]
}
如果要求按中的值排序,則預期輸出value2
{
dog: [key1, key3],
cat: [key2, key4]
}
uj5u.com熱心網友回復:
用于在我們迭代原始哈希#each_with_object中的鍵時構建哈希。
data = {
key1: ["Cop", "dog", "house"],
key2: ["doctor", "cat", "apartment"],
key3: ["Chef", "dog", "house"],
key4: ["Cop", "cat", "apartment"]
}
data.keys.each_with_object(Hash.new([])) { |k, h|
h[data[k][1]] = [k]
}
# => {"dog"=>[:key1, :key3], "cat"=>[:key2, :key4]}
uj5u.com熱心網友回復:
這似乎不是關于排序,而是關于分組。
這是遍歷每一對并構建匹配鍵和值的新哈希的問題。
# A Hash where the default value is a new empty array.
# See https://stackoverflow.com/questions/30367487/creating-a-hash-with-values-as-arrays-and-default-value-as-empty-array
grouped = Hash.new { |h, k| h[k] = [] }
# Iterate through the Hash
h.each { |key, things|
# Get the 2nd thing
thing = things[1]
# Add its key to the thing's group
grouped[thing] << key
}
p grouped
uj5u.com熱心網友回復:
也許不是最佳解決方案,但它會回傳預期結果。結果基本上是按值分組并包括鍵。
{"cat"=>[:key2, :key4], "dog"=>[:key1, :key3]}
這是解決您的挑戰的嘗試:
hash = {
key1: ["Cop", "dog", "house"],
key2: ["doctor", "cat", "apartment"],
key3: ["Chef", "dog", "house"],
key4: ["Cop", "cat", "apartment"]
}
def group_by(animal, hash)
keys = hash.select{|key, value| value[1] == animal }.keys
{animal => keys}
end
a = group_by("cat", hash)
b = group_by("dog", hash)
a.merge(b)
我確信有一個更“直接”的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516598.html
標籤:红宝石排序哈希
下一篇:基本ruby??if陳述句的問題
