Heim  >  Artikel  >  Backend-Entwicklung  >  So fügen Sie Nullen zu 2D-Slice-String-Elementen hinzu

So fügen Sie Nullen zu 2D-Slice-String-Elementen hinzu

PHPz
PHPznach vorne
2024-02-13 15:20:081118Durchsuche

So fügen Sie Nullen zu 2D-Slice-String-Elementen hinzu

Bei der PHP-Programmierung gehört die Manipulation von Strings zu den häufigsten Aufgaben. Eine häufige Aufgabe besteht darin, Nullen zu 2D-Slice-String-Elementen hinzuzufügen. Durch das Hinzufügen von Nullen zu Zeichenfolgeelementen können Sie sicherstellen, dass die Länge der Zeichenfolge konsistent ist, und die nachfolgende Verarbeitung und den Vergleich erleichtern. Wie kann diese Aufgabe erfüllt werden? Nachfolgend stellt Ihnen der PHP-Editor Banana ausführlich vor, wie Sie Nullen zu zweidimensionalen Slice-String-Elementen hinzufügen.

Frageninhalt

Die Aufgabe besteht darin, Nullen zu den String-Elementen eines 2D-Slices hinzuzufügen. Die Standardeingabe ist also [["7" "3" "1"]["2" "9"]]. Ich muss die Null vom letzten Element jedes Slice zum ersten Element hinzufügen. Bei jedem Schritt wird der Nullzähler um +1 erhöht. Daher wird erwartet, dass die Standardausgabe [["700", "30", "1"]["20", "9"]] beträgt.

Ich habe einen solchen Algorithmus ausprobiert, konnte aber nicht die erwartete Antwort erhalten. Das ist mein 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]]
 
}

Wie kann ich meinen Code ändern, um die erwartete Antwort zu erhalten?

Problemumgehung

Der Nullzähler muss in jeder Zeile zurückgesetzt werden, also verschieben Sie diesen Code in die erste Schleife.

Der Bereich beginnt ebenfalls beim Index 0 开始,并且您希望从行尾开始增加零,因此 counter 必须从 len(strs[i])-1 und Sie müssen ihn dekrementieren:

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
}

Nachdem Sie diese Änderungen vorgenommen haben, lautet die Ausgabe (probieren Sie es auf dem go-Spielplatz): p>

[[700 30 1] [20 9]]

Beachten Sie, dass das Suffix (Nullen) zum Anhängen erhöht wird, wenn Sie mit der Verarbeitung von Zeilen am Ende beginnen. Sie können also strings.repeat() verwerfen, indem Sie das vorherige Suffix beibehalten und „erweitern“:

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
}

Diese Ausgabe ist die gleiche. Probieren Sie es auf dem Go-Spielplatz aus.

Beachten Sie außerdem, dass Zeichenfolgen in Scheiben geschnitten werden können und das Ergebnis den Speicher mit der in Scheiben geschnittenen Zeichenfolge teilt. Es geht also schnell und erzeugt keinen Müll! Sie können eine lange zeros-Zeichenfolge erstellen, die nur Nullen enthält, und diese lange Zeichenfolge kann so zerlegt werden, dass sie so viele Nullen enthält, wie Sie anhängen möchten. Diese Lösung vermeidet jede unnötige Zeichenfolgenzuweisung und -verkettung:

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
}

Dadurch wird derselbe Inhalt noch einmal ausgegeben, bitte versuchen Sie es auf dem go-Spielplatz.

Das obige ist der detaillierte Inhalt vonSo fügen Sie Nullen zu 2D-Slice-String-Elementen hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen