On 09 Jul 2005, at 02:26, Raymond E. Griffith wrote:

Dennis,

I have a suggestion. It isn't perfect, but it does appear to be relatively
fast.

I start by creating return-delimited lists. The lists have 5000 elements in them and 2000 elements in them, respectively, although due to repeats the
customkeys are significantly less.

One problem is that you cannot set the keys of a variable directly. You can,
however, set the customkeys of an object directly, then put those
customproperties into a variable.

Then use intersect.

As I said, this appears to me to be relatively fast.

on mouseUp
  put 5000 into n1
  put 2000 into n2
  repeat with i = 1 to n1
    put random(10000) & cr after A
  end repeat
  repeat with i = 1 to n2
    put random(10000) & cr after B
  end repeat
  put the long milliseconds into ms
  set the customkeys of fld "LA" to A
  set the customkeys of fld "LB" to B
  put the customproperties of fld "LA" into arrA
  put the customproperties of fld "LB" into arrB
  intersect arrA with arrB
  answer keys(arrA) & return & "___" & the long milliseconds - ms
end mouseUp

Perhaps someone can try comparing this idea with others for time trials?

I hope this helps.

Raymond E. Griffith

Raymond,

Good idea. It does get around the need to iterate to get the keys. Unfortunately, that operation seems to be very slow in Rev. If I use the data from the previous tests, and do everything starting with the lists, is is 10 times slower than my first example. If I save the constant array first, it is 5 times slower. If I save both arrays and only get the get the customProperties to the array in the timing loop, it is still twice as slow, which is 17 times slower than the fastest way.

So you met the challenge of no loops --good job. But the Rev setting customKeys and getting customProperties seems to be much slower than any other operations tested. They must be using the crawl method for those operations.

Dennis




Hi Raymond, Dennis and everybody else,


The way proposed by Dennis is indeed the fastest on not too large amounts of data. So it is only fair to test the other way around too and try Dennis proposal on the same amount of data on which Raymond used his handler
Raymond's handler is a neat trick.
Though it is at least 2 times slower than a replace + split  method.

I adapted Raymond's method slightly to be able to produce a "one button copy-paste script" test for comparison :

on mouseUp
  ### filling the vars
  repeat 5000
    put random(10000) & cr after A
  end repeat
  repeat 2000
    put random(10000) & cr after B
  end repeat
  put A into x
  put B into y
  ### custom prop method
  put the long millisecs into zap
  set the customkeys of me to A
  put the customproperties of me into arrA
  set the customkeys of me to B
  put the customproperties of me into arrB
  intersect arrA with arrB
  put keys(arrA) into tKeys1
  put the long millisecs - zap into time1
  set the customkeys of me to ""
  ### replace split method
  put the long millisecs into zap
  replace cr with tab & cr in A
  split A with cr and tab
  replace cr with tab & cr in B
  split B with cr and tab
  intersect A with B
  put keys(A) into tKeys2
  put the long millisecs - zap into time2
  ### repeat for each + is not among method
  replace cr with comma in x
  replace cr with comma in y
  put the long millisecs into zap
  repeat for each item i in x
    if i is not among the items of y then put i & cr after tList
  end repeat
  put the long millisecs - zap into time3
  put time1 &cr& time2 & cr & time3
end mouseUp


Greetings,
Wouter

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to