LINUX.ORG.RU

Массив с координатами и ruby

 ,


2

2

Всем добра.
Начал недавно изучать rails и меня поставила в тупик элементарная вещь.
Есть необходимость хранить массив с координатами (координат две, обе - действительные числа).
В голову приходит решение в духе паскаля:

type
 LatLng: record
         x, y: real;
         end;
var
 Path: array of LatLng;

Однако такая конструкция здесь не применима.
Попадавшиеся мне методы создания двумерного массива были какими-то костыльними и при хранении их (массивов) в базе данных, как мне кажется, могут возникнуть проблемы.
Подкиньте идей, как можно это сделать эффективно и не съедая лишнего места в базе.


Например так:

>> array=[{x:1,y:2},{x:3,y:4}]
=> [{:x=>1, :y=>2}, {:x=>3, :y=>4}]
>> array[1][:x]
=> 3

blan4
()

Храни хэшом (как сказали) или как вариант — а создать по столбцу на x и y в базе нельзя? в чем проблема?

class CreateSomeTable < ActiveRecord::Migration
  def change
    create_table :some_table do |t|
      t.double :x
      t.double :y

      t.timestamps
    end
  end
end
GreenBag ★★
()
Ответ на: комментарий от special-k

Да, если это Postgresl можно даже заюзать их HStore тип данных, а в нем храним хешом твои {x: 0, y: 0}

GreenBag ★★
()
Последнее исправление: GreenBag (всего исправлений: 1)
Ответ на: комментарий от ffomg

GreenBag, ну на мой взгляд хранить координаты в виде отдельных столбцов - это в лучших традициях костылизма, без обид.

ffomg
() автор топика

Есть такая хрень как Struct, которая порождает класс-структуру.
И этот класс уже можно использовать для хранения данных:

Coord = Struct.new('Coord', :x, :y)
coord1 = Coord.new(500,100)
coord2 = Coord.new(700,200)

Polygon = []
Polygon << coord1
Polygon << coord2

puts Polygon[1].x

Но я обычно не морочусь, храню двухмерный массив.
И потом лезу к нему через индексы-константы.

IndX=0
IndY=1
Polygon = []
Polygon << [500,100]
Polygon << [700,200]

puts Polygon[1].[IndX]

Novator ★★★★★
()
Ответ на: комментарий от Novator

Выглядит неплохо, возьму на заметку! Благодарю.

ffomg
() автор топика
Ответ на: комментарий от Novator

Ой, опечатка, правильно так:

puts Polygon[1][IndX]

Novator ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.