如何将地图与to_s结合起来?

时间:2012-05-16 00:38:03

标签: ruby

我正在使用Mongoid并检索一堆BSON::ObjectId个实例。理想情况下,我想在检索时将它们转换为字符串。什么是正确的语法?它可以用两行完成:

foo = Bar.where(:some_id => N).map(&:another_id)
ids_as_strings = foo.map(&:to_s)

在上面的地图调用之后链接to_s的正确Ruby方法是什么?

2 个答案:

答案 0 :(得分:8)

这很好,但不要这样做!

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s)

看起来很酷,但想想看,你正在做两张地图。地图用于循环遍历数组或其他内容,并将在每个位置运行,检索新数组或其他结果。

那么,如果你想做两个操作,为什么要做两个循环?

ids_as_string = Bar.where(:some_id => N).map {|v| v.another_id.to_s}

这应该是这种情况下的方法,实际上看起来更好。

答案 1 :(得分:1)

你可以直接把它链起来:

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s)

我用模型尝试了这个,我得到了你的期望,如:

["1", "2", ...]