Die folgende Methode nimmt ein Array a
und gibt die doppelte Ganzzahl zurück, deren zweiter Indexwert der niedrigste ist. Das Array enthält nur Ganzzahlen zwischen 1 und a.length
. Mit diesem BeispielWie kann ich diese Ruby-Methode umgestalten, um schneller zu laufen?
firstDuplicate([1,2,3,2,4,5,1])
gibt die Methode 2
zurück.
def firstDuplicate(a)
num = 1
big_num_array = []
a.length.times do
num_array = []
if a.include?(num)
num_array.push(a.index(num))
a[a.index(num)] = "x"
if a.include?(num)
num_array.unshift(a.index(num))
num_array.push(num)
end
big_num_array.push(num_array) if num_array.length == 3
end
num += 1
end
if big_num_array.length > 0
big_num_array.sort![0][2]
else
-1
end
end
Der Code funktioniert, scheint aber länger als nötig und läuft nicht schnell genug. Ich suche nach Wegen, dies zu überdenken.
BTW, die Experten für "Code, der funktioniert, aber könnte besser lesbar und/oder schneller sein" sind vorbei [codereview.se]. Wenn Sie sich entscheiden, dass Ihre Frage dort ein besseres Zuhause findet, lesen Sie bitte die Hilfe, das On-Topic und Off-Topic-Seiten, die FAQ und, falls Sie unsicher sind, Fragen auf ihrer Meta-Seite oder im Chat andere Seite. (Mit anderen Worten: nehmen Sie mein Wort dafür nicht.) Sie haben einige spezifische Regeln darüber, welcher Code veröffentlicht werden kann und wie. (Beispielsweise bevorzugt [so], dass Sie Ihren Produktionscode auf [mcve] herunterskalieren, während [codereview.se] den * echten * Code im Kontext bevorzugt.) –
Sollten Sie sich dazu entscheiden, tun Sie dies auch nicht cross-post, löschen Sie diese Frage lieber oder bitten Sie einen Moderator, sie zu migrieren. –