I’m using action script and I have an array with more than 400.000 strings and now i’m using a loop and apply a regex to each item of the array to check if it’s valid or not. In case it’s valid, i put such item in a result array.
this process take too long, so it’s a nuisance because all the process must executed many times.
I’ve been thinking about if there is any other way (faster) i could use for applying the regex to all items without using a loop.
Anyone could give me an idea?
EDIT
Here I attach the code used:
var list:Array;
var list_total:Array = new Array;
var pattern:String = '^['+some_letters+']{'+n+'}$';
var cleanRegExp:RegExp = new RegExp(pattern, 'gi');
for (var i:int=0; i<_words.length; i++) {
list = _words[i].match(cleanRegExp);
if (list != null)
for (var j:int=0; j < list.length; j++)
list_total.push(list[j]);
}
Thanks.
This is not a complete answer, but may help you optimize your code.
Try to do operations in your loop that are as efficient as possible. Time them using the global
getTimer()function so you can compare which methods are the most efficient. When measuring/comparing, you may want to trigger your code many times, so that these differences are noticeable.For example, one improvement is inside a for loop, is to not query the array for it’s length each time:
Instead, store the length in a local variable outside of the array and use that:
The difference is subtle, but accessing the length from the local variable will be faster than getting it from the Array.
Another thing you can test is the regular expression itself. Try to come up with alternate expressions, or use alternate functions. I don’t recall the specifics, but in one project we determined (in our case) that using the
RegEx.test()method was the fastest way to do a comparison like this. It’s likely that this may be as quick asString.match()— but you won’t know unless you measure these things.Grant Skinner has some awesome resources available on his site. They are worth reading. This slide show/presentation on performance is worth looking at. Use the arrow keys to change slides.
Edit
Without hearing Grant’s presentation, the initial slides may not seem that interesting. However, it does get very interesting (with concrete code examples) around slide #43: http://gskinner.com/talks/quick/#43