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}/
}
Current Code:
Dir[“#{$baseDir}/#{board}/#{$dateString}/**”].each do |file|
$imgArray.delete_if{
|i| i =~ /#{file.split(‘/’).pop}/
}
use file.split(‘/’).last instead of pop - pop modifies the array
move the regex out of the block - you’ll save some object
constructions/destructions, and it’ll be easier on GC too.
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.
use Benchmark class to measure your improvements - that way, you’ll
know exactly if the new code is better or not.
Justin’s example seems to have made it more efficient. Later on I’ll
compare my original, a version with Jano’s suggestions, and Justin’s
using benchmark to see what is the most efficient.
Any more suggestions are welcome, of course, the more to benchmark the
merrier!
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.