@@ -32,7 +32,13 @@ class ProjectConfig {
3232 allExperiments. forEach ( { map [ $0. key] = $0} )
3333 return map
3434 } ( )
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+
3642 lazy var experimentFeatureMap : [ String : [ String ] ] = {
3743 var experimentFeatureMap = [ String: [ String] ] ( )
3844 project. featureFlags. forEach ( { ( ff) in
@@ -55,6 +61,24 @@ class ProjectConfig {
5561 return eventKeyMap
5662 } ( )
5763
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+
5882 lazy var allExperiments : [ Experiment ] = {
5983 return project. experiments + project. groups. map ( { $0. experiments} ) . flatMap ( { $0} )
6084 } ( )
@@ -139,7 +163,7 @@ extension ProjectConfig {
139163 * Get an Experiment object for an Id.
140164 */
141165 func getExperiment( id: String ) -> Experiment ? {
142- return allExperiments . filter { $0 . id == id } . first
166+ return experimentIdMap [ id ]
143167 }
144168
145169 /**
@@ -160,14 +184,14 @@ extension ProjectConfig {
160184 * Get a Feature Flag object for a key.
161185 */
162186 func getFeatureFlag( key: String ) -> FeatureFlag ? {
163- return project . featureFlags . filter { $0 . key == key } . first
187+ return featureFlagKeyMap [ key]
164188 }
165189
166190 /**
167191 * Get a Rollout object for an Id.
168192 */
169193 func getRollout( id: String ) -> Rollout ? {
170- return project . rollouts . filter { $0 . id == id } . first
194+ return rolloutIdMap [ id ]
171195 }
172196
173197 /**
@@ -189,7 +213,7 @@ extension ProjectConfig {
189213 * Get an attribute for a given key.
190214 */
191215 func getAttribute( key: String ) -> Attribute ? {
192- return project . attributes . filter { $0 . key == key } . first
216+ return attributeKeyMap [ key]
193217 }
194218
195219 /**
0 commit comments