Nice use of `Hash[]` here. Personally, I like to keep the argument to `Hash[]` as simple as possible. I would extract the building of the array into a private method or at least a local variable.

I notice that building an array of rows and an array of columns is almost identical. This is probably a good candidate for a private method. Something like:

```ruby
def rows
  Hash[build_units(@grid.row_vectors, Row)]
end

def columns
  Hash[build_units(@grid.column_vectors, Column)]
end

private

def build_units(vectors, unit_class)
  vectors.map.with_index(1) do |unit, index|
    [index, unit_class[*unit]]
  end
end
```

Thoughts?