Из описания в вашем вопросе, кажется, как будто аргумент nestedFunction(...)
должен быть массивом массивов с двойным нормированными элементами ([[Double]]
), а не массива с двойным стоимостью элементами ([Double]
).
Вы можете использовать .flatten()
для вашего простого вложенного массива nestedArray
в nestedFunction(...)
, а затем, например, reduce
для преобразования Double
значных элементов сплющенного массива в один сконцентрированный 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
(например, 2.6
может закончиться как 2.6000000000000001
) при использовании прямого инициализатора String
(String($1)
и String(elem)
выше, в первом и втором методах соответственно). Для того, чтобы выкупить это можно установить фиксированное количество знаков после запятой для String
представления ваших Double
значений, используя следующую String
инициализатору:
String(format: "%.3f", myDoubleValue)
/* \
number of fraction digits (3 here) */
например, заменить String($1)
и String(elem)
в методах выше по String(format: "%.3f", $1)
и String(format: "%.3f", elem)
, соответственно , для некоторого количества цифр по вашему выбору. Значения Double
будут округлены до количества введенных цифр фракции.
Не могли бы вы показать нам ожидаемый результат? –
Да, я тоже смущен. Мне нужно создать функцию, которая принимает в массив массив массивов двойников как параметр и возвращает строковый объект. Затем проведите через каждый из внутренних массивов и объедините каждый элемент внутренних массивов в объект String. Но я не уверен, как это сделать. – art3mis
ОК спасибо :) – art3mis