Afficher un message
Vieux 21/02/2008, 23h47   #2
Jano Svitok
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: More efficient comparing

On Thu, Feb 21, 2008 at 11:24 PM, Kyle Hunter <keletmaster@gmail.com> wrote:
> Hello,
>
> I've got an array that holds urls. Example Element:
> http://bla.random.com/bla.jpg.
>
> I also have images in a directory. I'd like my script to compare the
> bla.jpg from the URL with all files in a directory to make sure it's not
> a duplicate of something that's already there - if it is - delete it
> from the array. My current way of doing it uses quite a bit of
> resources, was wondering if someone could show me a more efficient
> example if possible.
>
> Current Code:
> Dir["#{$baseDir}/#{board}/#{$dateString}/**"].each do |file|
> $imgArray.delete_if{
> |i| i =~ /#{file.split('/').pop}/
> }


1. use file.split('/').last instead of pop - pop modifies the array

2. move the regex out of the block - you'll save some object
constructions/destructions, and it'll be easier on GC too.

3. try instead of splitting using a regex or rindex.
i.e. last_part = $1 if file =~ /\/([^/]*)$/
or last_part = file[file.rindex('/')..-1] or
file[(file.rindex('/')||0)..-1] to fix the cae when there's no '/' in
the filename.

4. use Benchmark class to measure your improvements - that way, you'll
know exactly if the new code is better or not.

  Réponse avec citation
 
Page generated in 0,06034 seconds with 9 queries