Well, you might be surprised by Ruby hashes. In general, their lookup times are actually quite a bit faster than arrays especially when you're doing lookups by the key (see:
Hashes vs Array). Basically, they do a sort of internal indexing in order to speed up retrieval. This makes them slower to add new elements, so you wouldn't want to use them for anything where you're constantly adding and removing elements, but for mostly static retrieval they offer excellent performance.
As for the post-processing, it really wasn't that odd. For my quest journal script, I take in a large amount of text for the quests. Because the text isn't formatted to fit neatly within the display box, I do line length calculations in order to split the text into appropriate line lengths. It's a slow operation, so I only do it once (the first time the configs are loaded) and then store the result for later display, which makes it much faster to open and display the journal while the player is actually playing.