hash = { "d" => [11, 22], "f" => [33, 44, 55] }
# case 1
hash.map {|k,vs| vs.map {|v| "#{k}:#{v}"}}.join(",")
=> "d:11,d:22,f:33,f:44,f:55"
# case 2
hash.map {|k,vs| vs.each {|v| "#{k}:#{v}"}}.join(",")
=> "11,22,33,44,55"
Run Code Online (Sandbox Code Playgroud)
唯一的区别是案例1使用vs.map,案例2使用vs.each.
这里发生了什么?
使用数组收集和每个数据之间的主要区别是什么?偏爱?
some = []
some.collect do {|x| puts x}
some.each do |x|
puts x
end
Run Code Online (Sandbox Code Playgroud) 当我多年前开始编写Ruby时,我花了一些时间来理解每个和地图之间的区别.当我发现所有其他Enumerable和Array方法时,情况会变得更糟.
在官方文档和许多 StackOverflow 问题的帮助下,我慢慢开始了解这些方法的作用.
以下是让我更长时间理解的内容:
我希望这个问题不是重复的:我对"为什么?"更感兴趣.比"什么?" 或"如何?",我认为它可以帮助Ruby新人.
似乎有很多方法可以在Ruby中循环使用Enumerable.有没有之间的差异each,foreach或collect,map或其他类似的方法呢?
或者有什么理由我不应该在某些情况下使用某些方法?
我的Node模型上有一个方法如下:
def users_tagged
@node = self
@tags = @node.user_tag_list
@users = @tags.each do |tag|
User.find_by email: tag
end
end
Run Code Online (Sandbox Code Playgroud)
我想要发生的是@users对象是一个User记录集合,但它只返回一个电子邮件地址列表.
这就是这个Node对象的样子:
> n
=> #<Node id: 6, name: "10PP Form Video", family_tree_id: 57, user_id: 57, media_id: 118, media_type: "Video", created_at: "2015-03-09 20:57:19", updated_at: "2015-03-09 20:57:19", circa: nil, is_comment: nil>
> n.user_tags
=> [#<ActsAsTaggableOn::Tag id: 4, name: "gerry@test.com", taggings_count: 1>, #<ActsAsTaggableOn::Tag id: 3, name: "abc@test.com", taggings_count: 1>]
[135] pry(main)> n.user_tag_list
=> ["gerry@test.com", "abc@test.com"] …Run Code Online (Sandbox Code Playgroud) ["H", "A", "L"].collect {|x| x.succ } # => ["I", "B", "M"] 但
["H", "A", "L"].each {|x| x.succ } # => ["H", "A", "L"]
Run Code Online (Sandbox Code Playgroud)
造成输出差异的原因是什么?
该succ方法递增一个字符串.
我有一个字符串数组,其中包含" firstname.lastname "字符串:
customers = ["aaa.bbb", "ccc.ddd", "www.uuu", "iii.oooo", ...]
Run Code Online (Sandbox Code Playgroud)
现在,我想通过删除" . "并使用空格来传输数组中每个元素的字符串格式.那是我想要的数组:
customers = ["aaa bbb", "ccc ddd", "www uuu", "iii oooo", ...]
Run Code Online (Sandbox Code Playgroud)
最有效的方法是什么?
- - - - - - - - 更多 - - - - - - - - - -
而关于我的情况下,如何在这里
ruby ×8
enumerable ×3
arrays ×2
collections ×1
each ×1
enums ×1
hash ×1
iteration ×1
iterator ×1
loops ×1