table digest once ...

Prev Next

Function Names

table digest once, table digest once ignore case

Description

This function works very similarly like table digest(), with the only difference that every row in the lookup table can be be retrieved only once and will then be internally marked as taken. Further lookups for remaining rows in the target table will skip the lookup table rows already taken. The search time ratio versus table size n is O ( log(n)) ).

Function 'table digest once'

Call as: procedure or function

Restrictions

Indirect parameter passing is disabled

Parameter count

6 - 8 (For parameter description and return values: see table integrate() )

Examples


       table load( lookup, "Examples/Table Lookup Example 1.csv" );

       table initialize( target, { { Name, Favorite Country },
          { Antonio,  Italy}, { Fritz, Germany }, { Andreas, Germany }, { Pascale, France}, { Mike, USA } } );

       echo("Target table before looking up with 'table digest':");
       table list ( target );

       echo("Lookup table:");
       table list ( lookup );

       count[] = table digest once ( target, Favorite Country, {Meal, Rating Sum},
                         lookup, Country, { Recommendation, Rating }, { append with space, add }, true, {Counter,Counter} );


       echo("Target table after looking up with 'table digest':");
       table list ( target );

       echo("Lookup table after looking up to check the 'Counter' column:");
       table list ( lookup );

       echo("Number of accesses: ", count[] );

Output

Target table before looking up with 'table digest':
    0 : Name    | Favorite Country
    1 : Antonio | Italy           
    2 : Fritz   | Germany         
    3 : Andreas | Germany         
    4 : Pascale | France          
    5 : Mike    | USA             

Lookup table:
    0 : City      | Country    | Meal or Drink | Recommendation | Rating
    1 : Hamburg   | Germany    | Meal          | Hering         | 2     
    2 : Hamburg   | Germany    | Meal          | Seafood        | 3     
    3 : New York  | USA        | Meal          | Pizza          | 5     
    4 : New York  | USA        | Meal          | Hamburger      | 5     
    5 : Florence  | Italy      | Drink         | Chianti        | 4     
    6 : Florence  | Italy      | Meal          | Tagliatelli    | 5     
    7 : Edinburgh | G. Britain | Drink         | Single Malt    | 3     
    8 : Edinburgh | G. Britain | Meal          | Fish & Chips   | 3     
    9 : New York  | USA        | Drink         | Lager          | 3     
   10 : Camarque  | France     | Meal          | Cheese         | 3     
   11 : Camarque  | France     | Spice         | Fleur du sel   | 4     
   12 : Boston    | USA        | Meal          | Lobster        | 4     
   13 : Plzen     | Czech Rep. | Drink         | Pils           | 4     
   14 : Munich    | Germany    | Meal          | Pork           | 3     
   15 : Munich    | Germany    | Drink         | Weissbier      | 5     

Target table after looking up with 'table digest':
    0 : Name    | Favorite Country | Meal                          | Rating Sum | Counter
    1 : Antonio | Italy            | Chianti Tagliatelli           | 9          | 2      
    2 : Fritz   | Germany          | Hering Seafood Pork Weissbier | 13         | 4      
    3 : Andreas | Germany          |                               |            |        
    4 : Pascale | France           | Cheese Fleur du sel           | 7          | 2      
    5 : Mike    | USA              | Pizza Hamburger Lager Lobster | 17         | 4      

Lookup table after looking up to check the 'Counter' column:
    0 : City      | Country    | Meal or Drink | Recommendation | Rating | Counter
    1 : Hamburg   | Germany    | Meal          | Hering         | 2      | 1      
    2 : Hamburg   | Germany    | Meal          | Seafood        | 3      | 1      
    3 : New York  | USA        | Meal          | Pizza          | 5      | 1      
    4 : New York  | USA        | Meal          | Hamburger      | 5      | 1      
    5 : Florence  | Italy      | Drink         | Chianti        | 4      | 1      
    6 : Florence  | Italy      | Meal          | Tagliatelli    | 5      | 1      
    7 : Edinburgh | G. Britain | Drink         | Single Malt    | 3      |        
    8 : Edinburgh | G. Britain | Meal          | Fish & Chips   | 3      |        
    9 : New York  | USA        | Drink         | Lager          | 3      | 1      
   10 : Camarque  | France     | Meal          | Cheese         | 3      | 1      
   11 : Camarque  | France     | Spice         | Fleur du sel   | 4      | 1      
   12 : Boston    | USA        | Meal          | Lobster        | 4      | 1      
   13 : Plzen     | Czech Rep. | Drink         | Pils           | 4      |        
   14 : Munich    | Germany    | Meal          | Pork           | 3      | 1      
   15 : Munich    | Germany    | Drink         | Weissbier      | 5      | 1      

Number of accesses: 24
Try it yourself: Open LIB_Function_table_digest_once.b4p in B4P_Examples.zip. Decompress before use.

See also

table lookup
table integrate once