Jadual Kandungan
Isi soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Bagaimana untuk mencetak senarai 2 di Golang?

Bagaimana untuk mencetak senarai 2 di Golang?

Feb 11, 2024 pm 02:51 PM
perpustakaan standard

如何在 Golang 中打印 2 列表?

editor php Baicao akan menunjukkan kepada anda cara mencetak 2 senarai di Golang. Di Golang, kita boleh menggunakan fungsi Println dalam pakej fmt untuk mencetak senarai. Mula-mula, kita perlu menentukan dan memulakan dua senarai secara berasingan, dan kemudian gunakan fungsi Println untuk mencetaknya. Dengan menggunakan gelung dan pembolehubah indeks, kita boleh melelakan elemen senarai satu demi satu dan mencetaknya. Dengan cara ini, kita boleh mencetak kandungan 2 senarai di Golang dengan mudah.

Isi soalan

Saya agak risau dengan masalah ini. Idea saya adalah untuk mempunyai fungsi yang mencetak dua lajur. Yang pertama adalah untuk kunci, yang mempunyai lebar tetap. Yang kedua ialah nilai, yang mungkin merupakan rentetan yang sangat panjang yang lebarnya bergantung pada lebar semasa terminal.

Contoh yang saya mahukan:

key1                                  value1value1value1value1
key2                                  value2value2value2value2value2value2value2value2value2value2value2
                                      value2value2value2value2value2value2value2value2value2value2value2
                                      value2value2value2value2value2value2
Salin selepas log masuk

Hasil terbaik yang saya perolehi setakat ini ialah menggunakan lipgloss untuk menetapkan lebar tetap untuk lajur pertama.

func printmetadata(metadata map[string]string, color string) {
    style := lipgloss.newstyle().width(32).foreground(lipgloss.color(color))
    for k, v := range metadata {
        fmt.println(style.render(k) + v)
    }
}
Salin selepas log masuk

Hasilnya serupa dengan:

Key1                                  Value1Value1Value1Value1
Key2                                  Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2
Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2
Salin selepas log masuk

Jadi, bagaimanakah cara saya memformat rentetan mengikut kehendak saya? Saya boleh menggunakan kedua-dua perpustakaan standard dan perpustakaan luaran, jadi sebarang cadangan adalah dialu-alukan.

Penyelesaian

Saya mencipta fungsi untuk ini. Fungsi ini mengambil dua parameter, yang pertama ialah pembolehubah pemetaan untuk lajur, dan yang kedua ialah berapa banyak aksara untuk mengisi setiap baris. Ia hanya menukar kandungan nilai kunci dengan ruang menjadi pembolehubah baharu dan kemudian mencetak nilai kunci. Tetapi jika anda mempunyai kerja dengan nilai yang tidak diubah suai, anda boleh menggunakan pembolehubah yang tidak diubah suai.

package main

import (
    "fmt"
    "errors"
    "strings"
    "sort"
)

func main() {
    a := map[string]string{
    "key1": strings.repeat("value1", 50), 
    "key2": strings.repeat("value2", 50), 
    "key3": strings.repeat("value3", 50),
    }
    
    err := columner(a, 30)
    
    if err != nil {
        fmt.println(err)
    }
    
}

func columner(m map[string]string, charamount int) error{

    var keys []string
    
    var keylens []int
    
    // to avoid index panics and gathering keys for later usage
    for key, value := range m {
        if charamount > len(value) || charamount < 1{
            return errors.new("error: charamount neither be greather than length of key's value nor below 1")
        }
        keys = append(keys, key)
        keylens = append(keylens, len(key))
    }

    sort.ints(keylens)
    
    for i := 0; i < len(keys); i++ {
        
        // for storing updated value of key
        var value2 string
        
        value := m[keys[i]]
        // will used while extracting substring of key's value as first index
        firsti := 0
        
        // last index for extract substring from key's value. the len of substring will be same as charamount
        charamount2 := charamount
        
        // will be used to advance next substring of key's value
        advance := charamount2
        
        // spaces between between key and value 
        // key       value
        spacing := strings.repeat(" ", 20 + (keylens[0] - len(keys[i])))
        
        // var for adjusting spaces of gap between key and value of next line
        // key        value
        //          value
        // to
        // key        value
        //            value
        spacingu := spacing + strings.repeat(" ", len(keys[i]) + 1)
        
        // this loop will be run as long as there is no substring left which exceed next line
        for j := 0; j < len(value); j += advance {
            
            // adjusting spaces of gap between key and value of next line
            if j > 0 {
                spacing = spacingu
            }
            
            // add space between key and value, then extract substring, then add spaces to the next line of the
            // next substring of key's value
            value2 += spacing + value[firsti:charamount2] + "\n"
            
            // finish loop when there is no substring that can be exceed to next line
            if ((len(value) - charamount2) < advance) || ((len(value) - charamount2) == advance) {
                break
            }
    
            // changing first index to start index of next substring of key's value
            firsti = charamount2
            
            // advancing to next substring of key's value
            charamount2 += advance
        }   
        
        // add last remaining substring of key's value to variable which will be show as formatted.
        value2 += spacing + value[charamount2:]

        // show formatted key and value
        fmt.println(keys[i], value2, "\n")
        
    }
    
    return nil
}
Salin selepas log masuk

Berikut ialah output sampel:

Key1                     Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1
                         Value1Value1Value1Value1Value1 

Key2                     Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2
                         Value2Value2Value2Value2Value2 

Key3                     Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
                         Value3Value3Value3Value3Value3
Salin selepas log masuk

Tetapi sila ambil perhatian ini, susunan kunci dan nilai mungkin berbeza pada setiap pelaksanaan kerana jenis peta tidak tertib apabila mencetak dalam gelung for dengan kunci, pasangan nilai.

Atas ialah kandungan terperinci Bagaimana untuk mencetak senarai 2 di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menggunakan nilai mutlak dalam c++ Bagaimana untuk menggunakan nilai mutlak dalam c++ May 06, 2024 pm 06:15 PM

Bagaimana untuk menggunakan nilai mutlak dalam c++

Apakah maksud iomanip dalam bahasa c Apakah maksud iomanip dalam bahasa c May 02, 2024 pm 05:57 PM

Apakah maksud iomanip dalam bahasa c

Cara menggunakan std:: dalam c++ Cara menggunakan std:: dalam c++ May 09, 2024 am 03:45 AM

Cara menggunakan std:: dalam c++

Apakah maksud perdana dalam c++ Apakah maksud perdana dalam c++ May 07, 2024 pm 11:33 PM

Apakah maksud perdana dalam c++

Apakah maksud konfigurasi dalam java? Apakah maksud konfigurasi dalam java? May 07, 2024 am 02:39 AM

Apakah maksud konfigurasi dalam java?

Bagaimana untuk mengira nilai mutlak dalam c++ Bagaimana untuk mengira nilai mutlak dalam c++ May 06, 2024 pm 06:21 PM

Bagaimana untuk mengira nilai mutlak dalam c++

Apakah maksud fabs dalam c++ Apakah maksud fabs dalam c++ May 08, 2024 am 01:15 AM

Apakah maksud fabs dalam c++

Bagaimana untuk memunculkan tetingkap dalam python Bagaimana untuk memunculkan tetingkap dalam python May 05, 2024 pm 08:15 PM

Bagaimana untuk memunculkan tetingkap dalam python

See all articles