In PHP programming, manipulating strings is one of the common tasks. One common task is to add zeros to 2D slice string elements. By adding zeros to string elements, you can ensure that the length of the string is consistent and facilitate subsequent processing and comparison. So, how to achieve this task? Below, PHP editor Banana will introduce you in detail how to add zeros to two-dimensional slice string elements.
The task is to add zeros to the string elements of a 2D slice. So the standard input is [["7" "3" "1"]["2" "9"]] I need to add the zero from the last element of each slice to the first element. For each step, the zero counter is incremented by 1. Therefore, standard output is expected to be [["700", "30", "1"]["20", "9"]].
I tried such an algorithm but couldn't get the expected answer. This is my code:
package main import ( "fmt" "strings" ) func addZero(strs [][]string) [][]string { zero := "0" counter := 0 for i := range strs { for j := range strs[i] { strs[i][j] += strings.Repeat(zero, counter) } counter++ } return strs } func main() { fmt.Println(addZero([][]string{{"7", "3", "1"}, {"2", "9"}}))// here the result is [[7 3 1] [20 90]] }
How do I change my code to get the expected answer?
The zero count must be reset in each row, so move this code inside the first loop.
The range also starts at index 0
, and you want zeros to increase from the end of the line, so the counter
must start from len(strs[i])-1
starts and you have to decrement it:
func addzero(strs [][]string) [][]string { for i := range strs { zero := "0" counter := len(strs[i]) - 1 for j := range strs[i] { strs[i][j] += strings.repeat(zero, counter) counter-- } } return strs }
After making these changes, the output will be (try it on go playground): p>
[[700 30 1] [20 9]]
Note that if you start processing lines from the end, the suffix (zero) to append will be increased. So you can discard strings.repeat()
:
func addzero(strs [][]string) [][]string { for _, line := range strs { zeros := "" for i := len(line) - 1; i >= 0; i-- { line[i] += zeros zeros += "0" } } return strs }
This output is the same. Try it on go playground.
Also note that strings can be sliced, and the result shares memory with the sliced string. So it’s fast and creates no garbage! You can construct a long zeros
string containing only zeros, and this long string can be sliced to contain as many zeros as you want appended. This solution avoids any unnecessary string allocation and concatenation:
var zeros = strings.Repeat("0", 1000) // Use the maximum length here func addZero(strs [][]string) [][]string { for _, line := range strs { count := len(line) - 1 for i := range line { line[i] += zeros[:count-i] } } return strs }
This outputs the same content again, please try it on go playground.
The above is the detailed content of How to add zeros to 2D sliced string elements. For more information, please follow other related articles on the PHP Chinese website!