Home >Backend Development >Golang >How to add zeros to 2D sliced ​​string elements

How to add zeros to 2D sliced ​​string elements

PHPz
PHPzforward
2024-02-13 15:20:081179browse

How to add zeros to 2D sliced ​​string elements

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.

Question content

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?

Workaround

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():

by keeping and "expanding" the previous suffix
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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete