Ruby 使用lambdas而不依赖条件或枚举数的哈希
如果我有一个类似于这样的列表,包含基本颜色的可接受别名和根名称:Ruby 使用lambdas而不依赖条件或枚举数的哈希,ruby,hash,lambda,Ruby,Hash,Lambda,如果我有一个类似于这样的列表,包含基本颜色的可接受别名和根名称: coloraliases = { ["red", "crimson", "auburn", "rose", "maroon", "burgundy"] => "red", ["blue", "teal", "aqua", "azure", "cobalt"] => "blue", ["green", "emerald", "absinthe", "avocado", "lime"] => "green
coloraliases = {
["red", "crimson", "auburn", "rose", "maroon", "burgundy"] => "red",
["blue", "teal", "aqua", "azure", "cobalt"] => "blue",
["green", "emerald", "absinthe", "avocado", "lime"] => "green",
["yellow", "banana", "lemon", "gold", "citrine"] => "yellow"
}
我不能这么做:
coloraliases["crimson"]
#=> "red"
我试图这样哄骗这种行为:
basecolor = lambda do |str|
x = nil
coloraliases.each do |keys, value|
if keys.include?(str)
x = value
break
end
end# of coloraliases hash
x
end
这应该像预期的那样起作用
我想知道是否有更优雅的方法来做到这一点,特别是不涉及条件块甚至枚举数的方法。三元运算符是好的或更好的,因为它们很紧凑,但仍然不可取,因为它们是条件运算符。您的哈希设计是错误的。您使用它的方式不应该是散列。应该是:
coloraliases = {
"red" => "red",
"crimson" => "red",
"auburn" => "red",
"rose" => "red",
"maroon" => "red",
"burgundy" => "red",
"blue" => "blue",
"teal" => "blue",
"aqua" => "blue",
"azure" => "blue",
"cobalt" => "blue",
...
}
然后,你会得到:
coloraliases["crimson"] # => "red"
你的散列设计是错误的。您使用它的方式不应该是散列。应该是:
coloraliases = {
"red" => "red",
"crimson" => "red",
"auburn" => "red",
"rose" => "red",
"maroon" => "red",
"burgundy" => "red",
"blue" => "blue",
"teal" => "blue",
"aqua" => "blue",
"azure" => "blue",
"cobalt" => "blue",
...
}
然后,你会得到:
coloraliases["crimson"] # => "red"
我所能想到的就是散列选择器模式:这与使用ColorAlias['crimson']非常相似……让每个键单独映射到相应的基色有什么不对?我现在看到@sawa建议在我保存这个之前的几秒钟。我能想到的只是散列选择器模式:这很像做ColorAlias['crimson']…让每个键分别映射到相应的基色有什么不对?我现在看到@sawa在我保存这个之前建议的几秒钟。令人沮丧的简单。谢天谢地简单。谢谢