我正在制造电报机器人,我希望它能够针对颜色名称提供十六进制代码。我知道有很多rgb颜色,但是我也知道有一篇维基百科文章,其中包含已知的颜色名称和十六进制代码,如果我能够以json的形式获取页面,那将会有所帮助。另外,如果json表示十六进制代码=颜色名称,该如何反转呢?如何按值而不是名称进行搜索?
答案 0 :(得分:2)
您可以编写自己的哈希,然后Hash#invert:
color_to_hex = { red: 'ff0000', green: '00ff00', blue: '0000ff' }
hex_to_color = color_to_hex.invert
color_to_hex[:red] #=> "ff0000"
hex_to_color['00ff00'] #=> :green
或者不创建逆哈希:
colors_to_hex.key('00ff00') #=> :green
答案 1 :(得分:1)
您可以尝试以下操作:
color_mappings = { 'yellow' => 'ffff00', 'red' => 'ff0000', 'green' => '00ff00', 'blue' => '0000ff' }
哈希可以按如下方式反转:
inverted_color_mappings = color_mappings.invert
输出:
{
"ffff00" => "yellow",
"ff0000" => "red",
"00ff00" => "green",
"0000ff" => "blue"
}
pattern = 'fff'
inverted_color_mappings.select{ |k,v| k[pattern] }
输出:
{
"ffff00" => "yellow"
}
答案 2 :(得分:0)
其他答案很好。但是,如果您正在寻找已经为您完成工作的宝石,请查看Color。其Color::CSS[]
方法按名称查找颜色并返回Color :: RGB对象,该对象又具有hex
和html
方法:
require "color"
aliceblue = Color::CSS["aliceblue"]
puts aliceblue.hex
# => f0f8ff
puts aliceblue.html
# => #f0f8ff
Color :: RGB也有一个by_hex
静态方法,该方法将为给定的十六进制代码返回一个名为Color :: RGB的对象。 name
方法返回名称(如果有的话):
require "color"
mystery_color = Color::RGB.by_hex("#ffefd5")
puts mystery_color.name
# => papayawhip
您可以在repl.it上看到它的运行情况:https://repl.it/@jrunning/EqualReasonableSpellchecker(如果第一次按下运行按钮时遇到错误,请再次点击它。repl.it有时在首次加载宝石时会遇到问题)