@@ -32,7 +32,13 @@ class ProjectConfig {
32
32
allExperiments. forEach ( { map [ $0. key] = $0} )
33
33
return map
34
34
} ( )
35
-
35
+
36
+ lazy var experimentIdMap : [ String : Experiment ] = {
37
+ var map = [ String: Experiment] ( )
38
+ allExperiments. forEach ( { map [ $0. id] = $0} )
39
+ return map
40
+ } ( )
41
+
36
42
lazy var experimentFeatureMap : [ String : [ String ] ] = {
37
43
var experimentFeatureMap = [ String: [ String] ] ( )
38
44
project. featureFlags. forEach ( { ( ff) in
@@ -55,6 +61,24 @@ class ProjectConfig {
55
61
return eventKeyMap
56
62
} ( )
57
63
64
+ lazy var attributeKeyMap : [ String : Attribute ] = {
65
+ var map = [ String: Attribute] ( )
66
+ project. attributes. forEach ( { map [ $0. key] = $0 } )
67
+ return map
68
+ } ( )
69
+
70
+ lazy var featureFlagKeyMap : [ String : FeatureFlag ] = {
71
+ var map = [ String: FeatureFlag] ( )
72
+ project. featureFlags. forEach ( { map [ $0. key] = $0 } )
73
+ return map
74
+ } ( )
75
+
76
+ lazy var rolloutIdMap : [ String : Rollout ] = {
77
+ var map = [ String: Rollout] ( )
78
+ project. rollouts. forEach ( { map [ $0. id] = $0 } )
79
+ return map
80
+ } ( )
81
+
58
82
lazy var allExperiments : [ Experiment ] = {
59
83
return project. experiments + project. groups. map ( { $0. experiments} ) . flatMap ( { $0} )
60
84
} ( )
@@ -139,7 +163,7 @@ extension ProjectConfig {
139
163
* Get an Experiment object for an Id.
140
164
*/
141
165
func getExperiment( id: String ) -> Experiment ? {
142
- return allExperiments . filter { $0 . id == id } . first
166
+ return experimentIdMap [ id ]
143
167
}
144
168
145
169
/**
@@ -160,14 +184,14 @@ extension ProjectConfig {
160
184
* Get a Feature Flag object for a key.
161
185
*/
162
186
func getFeatureFlag( key: String ) -> FeatureFlag ? {
163
- return project . featureFlags . filter { $0 . key == key } . first
187
+ return featureFlagKeyMap [ key]
164
188
}
165
189
166
190
/**
167
191
* Get a Rollout object for an Id.
168
192
*/
169
193
func getRollout( id: String ) -> Rollout ? {
170
- return project . rollouts . filter { $0 . id == id } . first
194
+ return rolloutIdMap [ id ]
171
195
}
172
196
173
197
/**
@@ -189,7 +213,7 @@ extension ProjectConfig {
189
213
* Get an attribute for a given key.
190
214
*/
191
215
func getAttribute( key: String ) -> Attribute ? {
192
- return project . attributes . filter { $0 . key == key } . first
216
+ return attributeKeyMap [ key]
193
217
}
194
218
195
219
/**
0 commit comments