Aus der Beschreibung in Ihrer Frage, wie es scheint, wenn das Argument von nestedFunction(...)
sollte ein Array von Arrays mit Doppel bewerteten Elemente ([[Double]]
) eher als ein Array mit Doppel bewerteten Elemente ([Double]
) sein.
Sie können .flatten()
zu Ihrem einfach verschachtelten Array nestedArray
in nestedFunction(...)
verwenden und danach z. reduce
, um die Double
Wertelemente des abgeflachten Arrays zu einem konzentrierten String
zu transformieren.
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"
Als Alternative, wenn Sie sich mit einer for
Schleife gesetzt sind, können Sie auf dem abgeflachten for ... in
Array verwendet werden, zB:
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"
zu beachten, dass aufgrund der begrenzten Gleitkommagenauigkeit, einige doppelte Werte können mit einer "unordentlichen" String
Darstellung enden (zB 2.6
könnte enden als 2.6000000000000001
), wenn der direkte String
Initialisierer (String($1)
und String(elem)
oben, in der ersten bzw. zweiten Methode) verwendet wird. Zum Einlösen diesen Sie eine feste Anzahl von Bruchstellen für die String
Darstellung Ihrer Double
Werte einstellen könnten, mit dem folgenden String
initializer:
String(format: "%.3f", myDoubleValue)
/* \
number of fraction digits (3 here) */
ZB ersetzen String($1)
und String(elem)
in den Verfahren, die oben durch String(format: "%.3f", $1)
und String(format: "%.3f", elem)
bzw. , für eine bestimmte Anzahl von Bruchzahlen Ihrer Wahl. Die Double
Werte werden auf die Anzahl der gelieferten Bruchzahlen gerundet.
Können Sie uns bitte die erwartete Ausgabe zeigen? –
Ja, ich bin auch verwirrt. Ich muss eine Funktion erstellen, die ein Array von Double-Arrays als Parameter akzeptiert und ein String-Objekt zurückgibt. Durchlaufen Sie dann jedes der inneren Arrays und verketten Sie jedes Element der inneren Arrays zu einem String-Objekt. Aber ich bin mir nicht sicher, wie ich das anstellen soll. – art3mis
ok danke :) – art3mis