Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
More efficient comparing
Kyle Hunter
2/21/2008 10:25:00 PM
Hello,
I've got an array that holds urls. Example Element:
http://bla.random.c...
.
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}/
}
--
Posted via
http://www.ruby-...
.
3 Answers
Jano Svitok
2/21/2008 10:48:00 PM
0
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.c...
.
>
> 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.
Justin Collins
2/21/2008 10:59:00 PM
0
Kyle Hunter wrote:
> Hello,
>
> I've got an array that holds urls. Example Element:
>
http://bla.random.c...
.
>
> 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}/
> }
>
Try:
require 'set'
files = Dir["#{$baseDir}/#{board}/#{$dateString}/**"].map { |file|
File.basename(file) }.to_set
$imgArray.delete_if {|i| files.include? i.split("/")[-1] }
-Justin
Kyle Hunter
2/21/2008 11:14:00 PM
0
Thanks both of you,
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!
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
More efficient comparing
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password