--- title: When Two Macros are Faster than One draft: "false" --- While working on my Database datapack (still WIP), I knew I'd want to find # Scenario ## Dataset The data is stored in a storage `#_macro.array`. Array is populated with a total of 500 entries, each having a `id` and `string` fields. ```json [ { id: 1, string: "entry1" }, ... { id: 500, string: "entry500" } ] ``` ## Constraints The objective is to create an interface that receives a keyword, say `entry500`, and searches the array for an entry where the value of `string` matches the keyword. # One Macro Macros allow us to reach into our array and pick out an entry that matching value in the `string` property. ```vb ... one_macro.array[string:$(keyword)] ``` ```vb '# one_macro/run.mcfunction data modify storage test_namespace:test_namespace temp.keyword set value 'entry500' function test_namespace:one_macro/_searcharray with storage test_namespace:test_namespace temp data remove storage test_namespace:test_namespace temp.keyword data remove storage test_namespace:test_namespace temp.result ``` ```vb '# one_macro/_searcharray.mcfunction $data modify storage test_namespace:test_namespace temp.result set from storage test_namespace:test_namespace one_macro.array[string:$(keyword)] ``` # Two Macro ```vb '# two_macro/run.mcfunction data modify storage test_namespace:test_namespace temp.keyword set value 'entry500' function test_namespace:two_macro/_searchindex with storage test_namespace:test_namespace temp function test_namespace:two_macro/_searcharray with storage test_namespace:test_namespace temp data remove storage test_namespace:test_namespace temp.keyword data remove storage test_namespace:test_namespace temp.index data remove storage test_namespace:test_namespace temp.result ``` ```vb '# two_macro/_searchindex.mcfunction $data modify storage test_namespace:test_namespace temp.index set from storage test_namespace:test_namespace two_macro.index.$(keyword) ``` ```vb '# two_macro/_searcharray.mcfunction $data modify storage test_namespace:test_namespace temp.result set from storage test_namespace:test_namespace two_macro.array[$(index)] ```