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

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

PHPz
Release: 2024-02-13 15:20:08
forward
1197 people have browsed it

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]]
 
}
Copy after login

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
}
Copy after login

After making these changes, the output will be (try it on go playground):

[[700 30 1] [20 9]]
Copy after login

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
}
Copy after login

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
}
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template