Czy można zmienić index tablicy?

Witam.
Czy jest możliwość, żeby tablica zaczynała się od 1, a nie od 0?
To znaczy:
a = [1, 2, 3]
a[0] = 1
Żeby było:
a[1] = 1
A jeśli jest, to jak to osiągnąć?

Można, ale po co?

Korzystam z “algorytmu” który ma problem gdy tablica zaczyna od 0.
Generalnie przepisuję program z innego języka na ruby. Twórca mi powiedział o tym problemie.
Więc może choć jakaś podpowiedź jak szukać…? :stuck_out_tongue:

Poprawić algorytm.

Czyli generalnie nie ma na to w miarę łatwego sposobu?

class Array def [](arg) return nil if arg <= 0 self.at(arg-1) end end
Po co przepisujesz cokolwiek na Ruby, jeżeli nie chcesz korzystać z reguł tego języka?

[quote=RawOnRails]class Array def [](arg) return nil if arg <= 0 self.at(arg-1) end end
Po co przepisujesz cokolwiek na Ruby, jeżeli nie chcesz korzystać z reguł tego języka?[/quote]

Ten nowy aragorn w świebodzinie by też tak zrobił, ale ma zbyt szeroko rozłożone ręce :stuck_out_tongue:

RawOnRails:
Jeżeli nadpisujesz jakieś metody istniejących klas to powinieneś wiedzieć co robisz.

  1. Spróbuj użyć tego w praktyce, nie zadziała i w takiej formie nie ma szans zadziałać.
  2. Nawet jakbyś to zrobił poprawnie, to prawdopodobnie rozwalisz przy okazji kilka sposobów używania [].
  3. Jeżeli już chcesz nadpisać [], to jedynym sensownym sposobem na zrobienie tego jest:

class MyArray < Array def [](index) return nil if index <= 0 super(index - 1) end end
Tylko wtedy dalej masz coś, co nie zadziała tak jak chcesz:

a = MyArray.new([1, 2, 3]) a[1] = 5 a #=> [1, 5, 3] # przy czym przy takiej implementacji oczekiwałbyś [5, 2, 3]
Dlatego trzeba też nadpisać []=.

W niektórych algorytmach robiłem własne implementacje tablicy, ale na pewno nie powinno się tego robić poprzez nadpisywanie metod w klasie Array.

Heh, dopiero teraz zdałem sobie sprawę, że ktoś czytając forum może faktycznie tego użyć. W moim poście zabrakło oczywiście “;)”. Przepraszam i proszę o przeniesienie mojego posta do “zakładu patologii kodu” :wink:

Dobra. Mniej więcej łapie o co chodzi. Dzięki chłopaki. :wink:

@Risus: podeślij ten algorytm (z ciekawości chciałbym rzucić okiem). Chociaż ten fragment, który ma problem z tablicą indeksowaną od zera.