ruby-on-rails 获取数组的上一个值并在下一个数组中取消移位

wpx232ag  于 2023-01-03  发布在  Ruby
关注(0)|答案(2)|浏览(99)

我正在使用postgis和postgresql开发地理网络应用程序

@slopes = Slope.order(:id)
@array_slopes = @slopes.chunk_while { |i, j| i.average_slope == j.average_slope }.to_a

我得到一个斜率数组的数组(带有地理坐标),如下所示:

[[slope_1, slope_2, slope3][slope_4, slope_5, slope_6, slope_7]][[slope_8, slope_9]....]

我用@array_slops创建geojson线串,但是得到了一条虚线,因为我应该:

[[slope_1, slope_2, slope3][slope3, slope_4, slope_5, slope_6, slope_7]] [[slope_7 slope_8, slope_9]...]

我需要从每个数组中获取最后一个斜率,然后将其推入下一个数组中,以便使用geojson生成器生成连续的直线:

..slope3] => [slope3..
or
..slope_7]] => [[slope_7..

类似这样的东西(但在我的控制器中):

<% @array_slopes.each_with_index do |array, index| %>
    <% array.each do |slope| %>
        <% @array_slopes[index +1 ].unshift(array.last) %>
    <% end %>
<% end %>

我该怎么做呢?

ulmd4ohb

ulmd4ohb1#

这是一种简单明了的方法。

arr =[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr.each_index.map do |i|
  if i.zero?
    arr[0]
  else
    [arr[i-1].last] + arr[i]
  end
end
  #=> [[1, 2, 3], [3, 4, 5, 6], [6, 7, 8, 9]]
2ic8powd

2ic8powd2#

我找到了另一个解决办法:

@array_slopes.each_with_index do |group, i|
  next if group.empty? || i == @array.length - 1
  last_value = group.last
  @array[i+1].unshift(last_value)
end

相关问题