Advertisement
mbul

Untitled

Apr 20th, 2016
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.82 KB | None | 0 0
  1. --
  2. -- SearshTables
  3. --
  4.  
  5.  
  6. --
  7. -- Универсальная функция обратного вызова для SearchTables.
  8. -- Реализует проверку условий для переменного набора параметров
  9. -- Возвращает true если удовлетворены ВСЕ условия (AND), иначе - false
  10. --
  11.  
  12. function fmsg(fmt_str, ...)
  13.     message(fmt_str:format(...))
  14. end
  15.  
  16. function fn(t,...)
  17.  
  18.     local arg = {...}
  19.  
  20.     for k,v in ipairs(arg) do
  21.  
  22.         if k % 2 == 1 then
  23.             key = v
  24.         else
  25.             val = v
  26.             if t[key] ~= val then
  27.                 return false
  28.             end
  29.  
  30.         end
  31.  
  32.     end
  33.  
  34.     return true
  35.  
  36. end
  37.  
  38.  
  39. --
  40. -- Функция поиска элементов (таблиц) удовлетворяющих набору критериев.
  41. -- Переменное число параметров и соответствующих значенией, например :
  42. --
  43. -- SearchTables("trades",0,getNumberOf("trades")-1,fn,"seccode","SBER","qty",1,"price",120)
  44. --
  45. -- Возвращает таблицу, сожержащую сделки (таблицы) по SBER с qty=1 И price=120.
  46.  
  47.  
  48. function SearchTables(tables,s,e,fn,...)
  49.  
  50. local f = {},k
  51. local arg = {...}
  52.  
  53.     k = 0
  54.     for n = s,e do
  55.  
  56.         local t = getItem(tables,n)
  57.  
  58.         if fn(t,...) then  
  59.             k = k+1
  60.             table.insert(f,k,t)
  61.         end
  62.  
  63.     end
  64.  
  65.         return f
  66. end
  67.  
  68.  
  69. --
  70. -- Пример использования SearchTables
  71. --
  72.  
  73. function main()
  74.  
  75.     _start = os.clock()
  76.     for i = 1, 100 do
  77.         st =  SearchTables("all_trades",0,getNumberOf("all_trades")-1,fn,"sec_code","RIM6","class_code",'SPBFUT',"qty",1)
  78.     end
  79.     _end = os.clock()
  80.    
  81.     fmsg("found %d, took %.3f sec" , #st, _end-_start)
  82. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement