Ruby,比这更好的实现条件迭代的方法呢?

lms*_*lms 0 ruby

我有一个阵列 @cities = ["Vienna", "Barcelona", "Paris"];

而我正试图在两者之间展示间隔物.但是,阵列中可能只有1个元素,在这种情况下我不想显示间隔符.而且数组也可能是空的,在这种情况下我想什么都不显示.

对于上面的数组,我想要以下输出:

Vienna
-----
Barcelona
-----
Paris
Run Code Online (Sandbox Code Playgroud)

cityview在实际打印城市名称之前,我使用erb模板应用格式,css等.简化,它看起来像这样:

<p><%= @cities[@city_id] %></p>
Run Code Online (Sandbox Code Playgroud)

我已经实现如下......

unless @array.empty?
    @city_id = 0;

    erb :cityview
end

unless @array[1..-1].nil? 
    @array[1..-1].each_index do |i|
        @city_id = i+1;

        puts "<p>-------</p>";

        erb :cityview
    end 
end
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

Dav*_*ton 6

@cities.join("<p>--------</p>")
Run Code Online (Sandbox Code Playgroud)

编辑以解决模板

在这里,我假设有一个erbs方法返回渲染模板而不进行放置.返回字符串可以更容易地操作和重用.

@cities.map { |c| @city = c; erb :cityview }.join("<p>--------</p>")
Run Code Online (Sandbox Code Playgroud)

  • 我觉得我有一个似曾相识,因为两个小时前我写了[这个](http://StackOverflow.Com/questions/7420214/comma-separation-in-a-ruby-loop/7420250#comment -8973446)关于另一个类似的问题:"这已经成为Ruby的一般规则,几乎是任何其他现代语言:如果你写一个循环,很可能,你做错了,有一些更高阶的方法,更高级的迭代器,组合器,帮助器或类似的东西,你应该使用." (3认同)