]> git.corax.cc Git - toolbox/commitdiff
include/array: Improve performance of array_to_lines()
authorMatthias Kruk <m@m10k.eu>
Wed, 2 Feb 2022 11:20:12 +0000 (20:20 +0900)
committerMatthias Kruk <m@m10k.eu>
Wed, 2 Feb 2022 11:20:12 +0000 (20:20 +0900)
`array_to_lines()` calls `echo` for every element in the array, which
is wasteful and scales very poorly.

This commit modifies `array_to_lines()` so that it uses a single call
to `printf` to print all array elements.

This issue was pointed out by reddit user u/oh5nxo.

include/array.sh

index 7008b59a7de976c7936870c3ac91527e7f34505c..de5b820c164db53795ca3f10d47b170f07f41e30 100644 (file)
@@ -37,11 +37,11 @@ array_contains() {
 
 array_to_lines() {
        local array=("$@")
-       local item
 
-       for item in "${array[@]}"; do
-               echo "$item"
-       done
+       # Don't print an empty line if array is empty
+       if (( ${#array[@]} > 0 )); then
+               printf "%s\n" "${array[@]}"
+       fi
 }
 
 array_sort() {