also als erstes muss man sagen, dass die funktionen nicht dasselbe ergebnis liefern.
in der ersten erhält die variable immer einen der werte von p.x-320, 0 oder $map.width*32-640
in der zweiten version hingegen erhält die variable nur den wert p.x-320, dafür jedoch nicht immer.
zur performance lässt sich zur ersten version sagen, dass auch sie intern if-etc-vergleiche anwendet. also ist die aufwendigkeit eher irrelevant. diese vergleiche sind aber vermutlich schneller als in der 2. version, da sie in c geschrieben wurden.
jedoch wird dieser unterschied meiner meinung nach wieder zunichte gemacht, da 2 arrays erstellt werden müssen und in die variable immer ein wert geschrieben wird.
die zweite version dürfte (leicht verändert mit der between methode) schneller sein.
das ist eigentlich genau dasselbe wie deine version, nur dass die if vergleiche intern in c ausgeführt werden (bin mir nicht sicher - vlt is die methode auch in ruby geschrieben worden) und somit leicht schneller sind.
zudem wird kein kein array erzeugt und die variable muss auch nicht immer neu geschrieben werden.
letztenendes dürfte es aber keinen großen unterschied machen, welche der 3 versionen du vorziehst.
falls es dir dennoch wichtig ist, mach ne schleife, in der jede version ein paar tausen mal durchgeführt wird und vergleich am ende die zeiten.
dann hast du nämlich ein 100%ig richtiges ergebnis.
meins sind nämlich nur vermutungen.