FastLookup.psm1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#requires -version 3
<#
.SYNOPSIS
    Designed to optimize the speed of searching an array.
 
.DESCRIPTION
    Improve the speed of looking up a value in an array by creating a hashtable index.
    Good for looping through very large arrays or CSV files
 
.NOTES
    Version: 1.2
    Author: Miles Gratz
    Creation Date: April 20, 2017
    Purpose/Change: Improve examples
   
.EXAMPLE
 
    PS>
     
    $array = 1..1000000
    $hashtable = New-FastLookup -Array $array
    Get-FastLookup -Value 2017 -Array $array -Table $hashtable
 
.EXAMPLE
 
    PS>
 
    # Search for thousand random numbers in an array of one million
 
    $array = 1..1000000
    $search = 1..1000 | ForEach-Object {
        Get-Random -Maximum $array.Count
    }
 
    ---------------------------------------------------------------
     
    Where-Object Performance Test
 
    Measure-Command {
        $array | Where-Object { $_ -in $search }
    }
 
    Minutes : 2
    Seconds : 39
    Milliseconds : 658
 
    ---------------------------------------------------------------
 
    ForEach Performance Test
 
    Measure-Command {
        foreach ($item in $array){ if ($item -in $search){ $item } }
    }
 
    Minutes : 1
    Seconds : 27
    Milliseconds : 460
 
    ---------------------------------------------------------------
 
    FastLookup Performance Test
 
    Measure-Command {
        $hashtable = New-FastLookup -Array $array
        foreach ($item in $search){
            Get-FastLookup -Value $item -Array $array -Table $hashtable
        }
    }
 
    Minutes : 0
    Seconds : 49
    Milliseconds : 933
 
    ---------------------------------------------------------------
 
    [NOTE] Performance test on Windows 10 x64 (i5-6200U/8GB/SSD)
#>


$Functions  = @( Get-ChildItem -Path $PSScriptRoot\*.ps1 -ErrorAction SilentlyContinue )

foreach ($Function in $Functions)
{ 
    Try
    {
        . $Function.FullName
    }
    Catch
    {
        Write-Error -Message "Failed to import function $($Function.FullName): $_"
    }
}

Export-ModuleMember -Alias 'FastLookup'
Export-ModuleMember -Function $Functions.BaseName