Println output format in table

Like this Java question , but for Swift.

How can I display such a table on the console, ideally using println?

n       result1      result2      time1      time2    
-----------------------------------------------------  
5       1000.00      20000.0      1000ms     1250ms
5       1000.00      20000.0      1000ms     1250ms
5       1000.00      20000.0      1000ms     1250ms

I tried using println("n\tresult1\tresult2"), but the results are not lining up correctly.

0
source share
2 answers

Swift (3.0) String "padding (::)" [ Swift 2.x "stringByPaddingToLength (::)" ], , , , . , , . , .

, , "padding (::)". , , . , .

, "println", , Swift 2.x +, "print()".

:

//Set up the data
let n : Int = 5
let result1 = 1000.0
let result2 = 20000.0
let time1 = "1000ms"
let time2 = "1250ms"

//Establish column widths
let column1PadLength = 8
let columnDefaultPadLength = 12

//Define the header string
let headerString = "n".padding(toLength: column1PadLength, withPad: " ", startingAt: 0) + "result1".padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0) + "result2".padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0) + "time1".padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0) + "time2".padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0)

//Define the line separator
let lineString = "".padding(toLength: headerString.characters.count, withPad: "-", startingAt: 0)

//Define the string to display a line of our data
let nString = String(n)
let result1String = String(result1)
let result2String = String(result2)
let dataString = nString.padding(toLength: column1PadLength, withPad: " ", startingAt: 0) + result1String.padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0) + result2String.padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0) + time1.padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0) + time2.padding(toLength: columnDefaultPadLength, withPad: " ", startingAt: 0)

//Print out the data table
print("\(headerString)\n\(lineString)\n\(dataString)")

:

n       result1     result2     time1       time2       
--------------------------------------------------------
5       1000.0      20000.0     1000ms      1250ms  

"columnDefaultPadLength" 12 8 :

n       result1 result2 time1   time2   
----------------------------------------
5       1000.0  20000.0 1000ms  1250ms  

, , , , , ! "columnDefaultPadLength" 8 4 :

n       resuresutimetime
------------------------
5       1000200010001250

, , , .

+3

( , ), . , , .

func maxLength(data: Dictionary<String,Double>) -> Int {
    var greatestLength = 0
    for (key, value) in data {
        var valueLength = countElements(String(format: "%.2f", value))
        var keyLength   = countElements(key)
        var length      = max(valueLength, keyLength)
        if (length > greatestLength) {
            greatestLength = length
        }
    }
    return greatestLength
}
0

Source: https://habr.com/ru/post/1599515/


All Articles