Ruby 在哈希数组中查找值
如何从标记列表中获取指定名称的标记 例如,我想提取用户的标签Ruby 在哈希数组中查找值,ruby,Ruby,如何从标记列表中获取指定名称的标记 例如,我想提取用户的标签 如果没有do迭代器,这是否可以实现 这将返回:tag键的内容,用于==“fine” taglist = [{:name=>"Daniel_Xu_Forever", :tag=>["helo", "world"]}, {:name=>"kcuf", :tag=>["hhe"]}, {:name=>"fine", :tag=>[]}, {:name=>"how hare you",
如果没有
do
迭代器,这是否可以实现 这将返回:tag
键的内容,用于==“fine”
taglist = [{:name=>"Daniel_Xu_Forever", :tag=>["helo", "world"]},
{:name=>"kcuf", :tag=>["hhe"]},
{:name=>"fine", :tag=>[]},
{:name=>"how hare you", :tag=>[]},
{:name=>"heki", :tag=>["1", "2", "3"]},
{:name=>"railsgirls", :tag=>[]},
{:name=>"_byoy", :tag=>[]},
{:name=>"ajha", :tag=>[]},
{:name=>"nimei", :tag=>[]}]
首先,您只选择您感兴趣的用户
然后使用仅收集所需内容的数组
在这种情况下,最终结果将是:
[]
是否确实是迭代器
taglist.select { |x| x[:name] == 'fine' }.map { |u| u[:tag] }
我只是想说傻话,不如:
taglist.find{|tl| tl[:name] == 'fine'}[:tag]
因此,我的第一个答案忽略了“不”do
规则。
下面是一个不使用do
块的答案
eval taglist.to_s[/:name=>"fine", :tag=>(.*?)}/, 1]
#=> []
i=0
开始
如果标记列表[i][:name]=“好”
tag=taglist[i][:tag]
打破
结束
i+=1
当i
从技术上讲,我认为这仍然是使用块。但是可能满足了限制。不,没有循环就无法完成
即使您找到了代码避免循环的解决方案,也要确保您正在调用的库函数将包含一个循环。在数组中查找元素需要循环。句号
例如,以这个(人为的)例子
它似乎不使用循环,而是调用使用循环实现的grep
或者另一个同样做作的例子
pattern = "fine"
def pattern.===(h); self == h[:name]; end
taglist.grep(pattern)
它似乎在没有循环的情况下再次调用groupby
,但实际上是这样
所以答案是,不。它必须是一个哈希数组吗?如果不是,请使用taglist={:kcuf=>[“hhe”],:fine=>[]…}
是的,它必须是一个哈希数组!使用块进行迭代有什么问题?“没有do
iterator,这能实现吗?”是的,一个荒谬的条件,但这是“问题”的一部分。哈哈,星期天早上没有戴眼镜。。。我想你也错过了问题的“使用Ruby解决这个问题,但不要使用Ruby”部分:)我想知道JSON编码散列并使用%x[…]
将其馈送到Python脚本是否符合解决方案的要求。嗯,while
有一个隐式的do
。是的。。。我想不出任何迭代器不占用块..:/
pattern = "fine"
def pattern.===(h); self == h[:name]; end
taglist.grep(pattern)
class Hash; def method_missing(sym); self[sym]; end; end
taglist.group_by(&:name)["fine"]