【问题标题】:Multidimensional array to individual variables多维数组到单个变量
【发布时间】:2015-12-24 00:42:51
【问题描述】:

我有一个这样的多维数组,是一组经纬度的集合。

multi = [[12.96145, 77.58408],[12.96219, 77.58447],[12.96302, 77.58489],[12.96316, 77.58496],[12.96348, 77.58511],[12.96356, 77.58512],[12.96363, 77.5851],[12.96372, 77.58506],[12.96376, 77.58497],[12.96374, 77.58479]]

我想将上面的数组转换成如下的单个变量:

lat1 = 12.96145
lon1 = 77.58408
lat2 = 12.96219
lon2 = 77.58447
.
.

我试图通过如下漫长的过程来实现上述目标。我希望肯定会有更好的方法来做到这一点。

l1,l2,l3,l4,l5,l6,l7,l8,l9,l10 = multi

lat1 = l1.first
lon1 = l1.last
lat2 = l2.first
lon2 = l2.last
.
.

【问题讨论】:

  • 为什么不直接从数组中调用呢?是不是容易多了?
  • @c650 对不起,我没有明白你的意思。如果你再给我一点提示,我一定会努力实现的。
  • 为什么不直接从数组中调用,而不是将每个值放入一个变量中?
  • @c650 感谢您的宝贵建议。但我的要求略有不同。我认为我需要单独的值。由于我想将行字符串传递给 rails 应用程序中的自定义 sql 查询,sql 查询就像sql = "SELECT st_astext(ST_Line_Interpolate_Point(foo.the_line, ST_Line_Locate_Point(foo.the_line, ST_GeomFromText('POINT(#{lat} #{lon})')))) as g FROM (SELECT ST_GeomFromText('LINESTRING(#{lat1} #{lon1},#{lat2} #{lon2}, #{lat3} #{lon3}, #{lat4} #{lon4}, #{lat5} #{lon5})') As the_line) As foo;"。我觉得可以接受的答案符合我的要求。其他方法是否适用于我的上述查询?
  • 现在我想知道你为什么不使用 ActiveRecord...

标签: arrays ruby multidimensional-array variable-assignment


【解决方案1】:
lat1, lon1,
lat2, lon2,
...
latn, lonn,
= multi.flatten

(lat1, lon1),
(lat2, lon2),
...
(latn, lonn),
= multi

【讨论】:

    【解决方案2】:

    也可以像这样为实例变量赋值:

      multi.each_with_index do |pair, i|
        instance_variable_set("@lat#{i%multi.size+1}", pair.first)
        instance_variable_set("@lon#{i%multi.size+1}", pair.last)
      end
    

    然后引用变量:@lat1@lon1、...、@latn@lonn

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 2019-07-24
      • 2018-07-13
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多