通过键数组值获取嵌套Hash中的键值(Getting key value in nested Hash by key array values)

编程入门 行业动态 更新时间:2024-10-27 04:37:53
通过键数组值获取嵌套Hash中的键值(Getting key value in nested Hash by key array values)

示例哈希:

{ "audio" => { "audio/aac" => ["aac"], "audio/mpeg" => ["mp3", "mp2"], "audio/mp4" => ["m4a", "m4b", "m4r", "3gp"], "audio/ogg" => ["ogg", "oga"], "audio/flac" => ["flac"], "audio/speex" => ["spx"], "audio/x-ms-wma" => ["wma"], "audio/x-pn-realaudio" => ["rm", "ram"], "audio/vnd.wave" => ["wav"], "audio/x-musepack" => ["mpc", "mp+", "mpp"], "audio/x-aiff" => ["aiff", "aif", "aifc"], "audio/x-tta" => ["tta"] }, "video" => { "video/mp4" => ["mp4"], "video/mpeg" => ["mpg", "mpeg"], "video/x-m4v" => ["m4v"], "video/quicktime" => ["mov"], "video/x-msvideo" => ["avi"], "video/x-flv" => ["flv"], "video/webm" => ["webm"] } }

给文件扩展名获取相关内容类型的最佳方法是什么(第一次匹配是否可以)?

搜索“flac”应该返回“audio / flac”。

目前我正在使用这个:

hsh.each_key do |group| hsh[group].each do |k,v| return k if v.include?(extension) end end

Sample hash:

{ "audio" => { "audio/aac" => ["aac"], "audio/mpeg" => ["mp3", "mp2"], "audio/mp4" => ["m4a", "m4b", "m4r", "3gp"], "audio/ogg" => ["ogg", "oga"], "audio/flac" => ["flac"], "audio/speex" => ["spx"], "audio/x-ms-wma" => ["wma"], "audio/x-pn-realaudio" => ["rm", "ram"], "audio/vnd.wave" => ["wav"], "audio/x-musepack" => ["mpc", "mp+", "mpp"], "audio/x-aiff" => ["aiff", "aif", "aifc"], "audio/x-tta" => ["tta"] }, "video" => { "video/mp4" => ["mp4"], "video/mpeg" => ["mpg", "mpeg"], "video/x-m4v" => ["m4v"], "video/quicktime" => ["mov"], "video/x-msvideo" => ["avi"], "video/x-flv" => ["flv"], "video/webm" => ["webm"] } }

What's the best way given a file extension to get the associated content type (first match is okay)?

Searching for "flac" should return "audio/flac".

Currently I'm using this:

hsh.each_key do |group| hsh[group].each do |k,v| return k if v.include?(extension) end end

最满意答案

解开这种结构最好在创建时完成。 但是,您可以遍历各个级别并从中获得有用的东西。 如果我将初始哈希值分配给mime_hash我可以使用以下方法mime_hash它:

Hash[*mime_hash.map{ |av, types| types.map{ |mime_type, extensions| extensions.product([mime_type]) } }.flatten]

或者更详细地说:

Hash[ *mime_hash.map{ |av, types| types.map{ |mime_type, extensions| extensions.product([mime_type]) } }.flatten ]

哪个将返回:

{ "aac" => "audio/aac", "mp3" => "audio/mpeg", "mp2" => "audio/mpeg", "m4a" => "audio/mp4", "m4b" => "audio/mp4", "m4r" => "audio/mp4", "3gp" => "audio/mp4", "ogg" => "audio/ogg", "oga" => "audio/ogg", "flac" => "audio/flac", "spx" => "audio/speex", "wma" => "audio/x-ms-wma", "rm" => "audio/x-pn-realaudio", "ram" => "audio/x-pn-realaudio", "wav" => "audio/vnd.wave", "mpc" => "audio/x-musepack", "mp+" => "audio/x-musepack", "mpp" => "audio/x-musepack", "aiff" => "audio/x-aiff", "aif" => "audio/x-aiff", "aifc" => "audio/x-aiff", "tta" => "audio/x-tta", "mp4" => "video/mp4", "mpg" => "video/mpeg", "mpeg" => "video/mpeg", "m4v" => "video/x-m4v", "mov" => "video/quicktime", "avi" => "video/x-msvideo", "flv" => "video/x-flv", "webm" => "video/webm" }

Unraveling that sort of structure is best done when it's created. But, you can loop through the various levels and get something useful from it. If I assign your initial hash to mime_hash I can unravel it using:

Hash[*mime_hash.map{ |av, types| types.map{ |mime_type, extensions| extensions.product([mime_type]) } }.flatten]

or more verbosely:

Hash[ *mime_hash.map{ |av, types| types.map{ |mime_type, extensions| extensions.product([mime_type]) } }.flatten ]

Which will return:

{ "aac" => "audio/aac", "mp3" => "audio/mpeg", "mp2" => "audio/mpeg", "m4a" => "audio/mp4", "m4b" => "audio/mp4", "m4r" => "audio/mp4", "3gp" => "audio/mp4", "ogg" => "audio/ogg", "oga" => "audio/ogg", "flac" => "audio/flac", "spx" => "audio/speex", "wma" => "audio/x-ms-wma", "rm" => "audio/x-pn-realaudio", "ram" => "audio/x-pn-realaudio", "wav" => "audio/vnd.wave", "mpc" => "audio/x-musepack", "mp+" => "audio/x-musepack", "mpp" => "audio/x-musepack", "aiff" => "audio/x-aiff", "aif" => "audio/x-aiff", "aifc" => "audio/x-aiff", "tta" => "audio/x-tta", "mp4" => "video/mp4", "mpg" => "video/mpeg", "mpeg" => "video/mpeg", "m4v" => "video/x-m4v", "mov" => "video/quicktime", "avi" => "video/x-msvideo", "flv" => "video/x-flv", "webm" => "video/webm" }

更多推荐

本文发布于:2023-07-20 07:26:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1195969.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   数组   键值   array   values

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!