I love performance puzzles like this!

Answer: Turns it it just optimizes the for loops away!

Timings i get with the code provided:
    
    
    List: (seconds: 0, nanosecond: 9180)
    Table: (seconds: 0, nanosecond: 2794545)
    
    
    Run

Really strange!

Added dummy counter so that for loops don't get optimized out. In fact, program 
ran so slow I had to change the counter to 1000:
    
    
    import std/monotimes
    import tables
    import random
    var myTable = initTable[int, int]()
    var myList: seq[int]
    
    for i in 0 .. 1_000:
        myTable[i] = i
        myList.add(i)
    
    myList.shuffle()
    
    var start = getMonoTime()
    var dummyCounter = 0
    for i in 0 ..< 1_000:
        if myList.contains(i):
          inc dummyCounter
    echo("List: ", getMonoTime() - start)
    
    start = getMonoTime()
    for i in 0 ..< 1_000:
        if myTable.hasKey(i):
          inc dummyCounter
    echo("Table: ", getMonoTime() - start)
    echo dummyCounter
    
    
    Run
    
    
    List: (seconds: 0, nanosecond: 142290)
    Table: (seconds: 0, nanosecond: 3060)
    
    
    Run

Tables are soo soo much faster!

Reply via email to