En programmation PHP, la manipulation de chaînes est l'une des tâches courantes. Une tâche courante consiste à ajouter des zéros aux éléments de chaîne de tranche 2D. En ajoutant des zéros aux éléments de chaîne, vous pouvez garantir que la longueur de la chaîne est cohérente et faciliter le traitement et la comparaison ultérieurs. Alors, comment réaliser cette tâche ? Ci-dessous, l'éditeur PHP Banana vous présentera en détail comment ajouter des zéros aux éléments de chaîne de tranche bidimensionnelle.
La tâche consiste à ajouter des zéros aux éléments de chaîne d'une tranche 2D. L'entrée standard est donc [["7" "3" "1"]["2" "9"]] Je dois ajouter le zéro du dernier élément de chaque tranche au premier élément. Pour chaque pas, le compteur zéro est incrémenté de +1. Par conséquent, la sortie standard devrait être [["700", "30", "1"]["20", "9"]].
J'ai essayé un tel algorithme mais je n'ai pas pu obtenir la réponse attendue. Voici mon 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]] }
Comment puis-je modifier mon code pour obtenir la réponse attendue ?
Le compte zéro doit être réinitialisé à chaque ligne, alors déplacez ce code à l'intérieur de la première boucle.
La plage commence aussi à l'index 0
开始,并且您希望从行尾开始增加零,因此 counter
必须从 len(strs[i])-1
et il faut la décrémenter :
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 }
Après avoir effectué ces modifications, le résultat sera (essayez-le sur le go Playground) : p>
[[700 30 1] [20 9]]
Notez que si vous commencez à traiter les lignes à partir de la fin, le suffixe (zéros) à ajouter sera augmenté. Vous pouvez donc supprimer strings.repeat()
en conservant et en "étendant" le suffixe précédent :
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 }
Cette sortie est la même. Essayez-le sur le go terrain de jeu.
Notez également que les chaînes peuvent être découpées et que le résultat partage la mémoire avec la chaîne découpée. C'est donc rapide et ne crée aucun déchet ! Vous pouvez construire une longue chaîne zeros
contenant uniquement des zéros, et cette longue chaîne peut être découpée pour contenir autant de zéros que vous le souhaitez. Cette solution évite toute allocation et concaténation de chaînes inutiles :
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 }
Cela affiche à nouveau le même contenu, veuillez l'essayer sur le go terrain de jeu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!