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
获取指定名称的标签例如,我想提取用户"fine"
的标签?
这可以在没有do
迭代器的情况下实现吗?
答案 0 :(得分:4)
这将返回:tag
== 'fine'
密钥的内容
taglist.select { |x| x[:name] == 'fine' }.map { |u| u[:tag] }
首先,您只选择您感兴趣的用户.select
。
然后使用.map
收集只有你想要的数组。
在这种情况下,最终结果将是:[]
答案 1 :(得分:2)
do
真的是迭代器吗?
taglist.find{|tl| tl[:name] == 'fine'}[:tag]
傻到怎么样:
eval taglist.to_s[/:name=>"fine", :tag=>(.*?)}/, 1]
#=> []
答案 2 :(得分:2)
不,没有循环就无法完成。
即使您找到了代码避免循环的解决方案,您确实调用的库函数也会包含循环。在数组中查找元素需要循环。周期。
例如,采取这个(人为的)例子
pattern = "fine"
def pattern.===(h); self == h[:name]; end
taglist.grep(pattern)
似乎没有使用循环,但调用使用循环实现的grep
。
或另一个同样做作的例子
class Hash; def method_missing(sym); self[sym]; end; end
taglist.group_by(&:name)["fine"]
这似乎在没有循环的情况下调用group_by
,但实际上确实如此。
所以答案是,不。
答案 3 :(得分:0)
所以我的第一个回答错过了no do
规则。
这是一个不使用do
块的答案。
i=0
begin
if taglist[i][:name] == 'fine'
tag = taglist[i][:tag]
break
end
i+=1
end while i < taglist.length - 0
从技术上讲,我认为这仍然是一个块。但可能满足了限制。