1 #Region "Microsoft.VisualBasic::3ebde750944beb22fcb079945307e662, Microsoft.VisualBasic.Core\Scripting\Expressions\Aggregate.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module Aggregate
35     
36     '         FunctionGetAggregateFunction
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports System.Runtime.CompilerServices
44
45 Namespace Scripting.Expressions
46
47     Public Module Aggregate
48
49         ''' <summary>
50         ''' Get ``Aggregate`` function by term.
51         ''' </summary>
52         ''' <param name="name$">
53         ''' + max
54         ''' + min
55         ''' + average
56         ''' </param>
57         ''' <returns></returns>
58         ''' 
59         <Extension> Public Function GetAggregateFunction(name$) As Func(Of IEnumerable(Of Double), Double)
60             Select Case LCase(name)
61                 Case "max"
62                     Return Function(x) x.Max
63                 Case "min"
64                     Return Function(x) x.Min
65                 Case "average""avg""mean"
66                     Return Function(x) x.Average
67
68                 Case Else
69                     Throw New NotImplementedException(name)
70             End Select
71         End Function
72     End Module
73 End Namespace