2016-06-28 101 views
3

我有一個雙精度數組的數組。你如何將它轉換爲控制檯上打印的單個字符串?如何將一個數組的雙精度數組轉換爲字符串,Swift

我需要創建一個函數,它以一個雙精度數組數組作爲參數並返回一個字符串對象。然後遍歷每個內部數組,並將內部數組的每個元素連接成一個String對象。但我不知道如何去做。

var array1 = [2.6, 6.7, 7.2, 4.1, 3.1] 
var array2 = [1.2, 3.5, 2.8, 4.5, 6.4] 
var array3 = [1.2, 1.3, 1.4, 1.5, 1.6] 

var nestedArray = [array1, array2, array3] 

這是我的代碼...但我不知道如何爲循環,會給我我的回答做了...

func nestedFunction(nestedArray: [[Double]]) -> String { 
    var stringVar: String = "" 

    (for loop here...) 

    return stringVar 
} 

print(nestedArrayFunction(nestedArray)) 

預期的輸出應該是字符串對象,不帶括號

+1

您能告訴我們預期的產量嗎? –

+0

是的,我也很困惑。我需要創建一個函數,它以一個雙精度數組數組作爲參數並返回一個字符串對象。然後遍歷每個內部數組,並將內部數組的每個元素連接成一個String對象。但我不知道如何去做。 – art3mis

+0

好的謝謝:) – art3mis

回答

0

從你的問題看來,如果的nestedFunction(...)的參數應該是一個陣列具有雙值元素[[Double]]),而不是一個陣列具有雙值元素[Double])陣列的描述。

你可以利用.flatten()來簡單的嵌套數組nestedArraynestedFunction(...),然後例如reduce將平坦陣列的重要元素轉換爲一個集中的String

var array1 = [2.6, 6.7, 7.2, 4.1, 3.1] 
var array2 = [1.2, 3.5, 2.8, 4.5, 6.4] 
var array3 = [1.2, 1.3, 1.4, 1.5, 1.6] 

var nestedArray = [array1, array2, array3] 

func nestedFunction (nestedArray: [[Double]])-> String { 
    return String(nestedArray 
     .flatten() 
     .reduce("") { $0 + ", " + String($1) } 
     .characters.dropFirst(2)) 
} 

let asString = nestedFunction(nestedArray) 
    // asString = "2.6, 6.7, 7.2, 4.1, 3.1, 1.2, 3.5, 2.8, 4.5, 6.4, 1.2, 1.3, 1.4, 1.5, 1.6" 

作爲替代方案,如果你在使用for環設置,可以將扁平陣列上使用for ... in,例如:

var array1 = [2.6, 6.7, 7.2, 4.1, 3.1] 
var array2 = [1.2, 3.5, 2.8, 4.5, 6.4] 
var array3 = [1.2, 1.3, 1.4, 1.5, 1.6] 

var nestedArray = [array1, array2, array3] 

func nestedFunction (nestedArray: [[Double]])-> String { 
    var stringVar: String = "" 
    var isFirstElement = true 
    for elem in nestedArray.flatten() { 
     stringVar += (isFirstElement ? "" : ", ") + String(elem) 
     isFirstElement = false 
    } 
    return stringVar 
} 

let asString = nestedFunction(nestedArray) 
    // asString = "2.6, 6.7, 7.2, 4.1, 3.1, 1.2, 3.5, 2.8, 4.5, 6.4, 1.2, 1.3, 1.4, 1.5, 1.6" 

注意,由於有限的浮點精度,一些當使用直接String初始值設定項(上面的String($1)String(elem),分別在第一個和第二個方法中)時,雙值可能以「凌亂」String表示形式(例如2.6可能最終爲2.6000000000000001)結束。要兌換此您可以設置的小數位數的固定數目爲您Double值的String表示,使用以下String初始化:

String(format: "%.3f", myDoubleValue) 
    /*    \ 
      number of fraction digits (3 here) */ 

例如,上面分別String(format: "%.3f", $1)String(format: "%.3f", elem),替換方法String($1)String(elem) ,爲您選擇的一些小數位數。 Double值將四捨五入爲提供的小數位數。

+0

它的工作原理...謝謝:) – art3mis

+0

@VeronicaG高興地幫助! – dfri

0

陣列符合CustomStringConvertible,所以你可以用它description屬性:

nestedArray.description 

輸出:

[[2.6000000000000001,6.7000000000000002,7.2000000000000002,4.0999999999999996,3.1000000000000001],[1.2,3.5,2.7999999999999998,4.5 6.4000000000000004],[1.2,1.3,1.3999999999999999,1.5,1.6000000000000001]]

這是常規的print函數用來打印這樣的數組。

0

首先,您需要連接或組合您所擁有的數組。你可以簡單地通過創建另一個數組來完成,就像這樣;

let fullArray = array1 + array2 + array3 

接下來,你可以打印完整的陣列,

print(fullArray) 

這將使你喜歡

[2.6000000000000001, 6.7000000000000002, 7.2000000000000002, 4.0999999999999996, 3.1000000000000001, 1.2, 3.5, 2.7999999999999998, 4.5, 6.4000000000000004] 

的東西,也可以創建使用.joinWithSeparator這個數組的字符串表示(String:String)方法,像這樣

let stringRepresentation = fullArray.joinWithSeparator(",") 
print(stringRepresentation) 

希望這有助於!


1

如果你想它去掉括號:

let string = nestedArray.flatMap { (array) in 
    array.flatMap { String($0) }.joinWithSeparator(",") 
}.joinWithSeparator(",") 

輸出:

"2.6,6.7,7.2,4.1,3.1,1.2,3.5,2.8,4.5,6.4,1.2,1.3,1.4,1.5,1.6" 

記住,使用,作爲分隔符不是本地化的證明,並在法國的語言環境會導致像「2,6,6,7,7,2」等字符串。

相關問題