数组中的数组 Swift
Array within Array Swift
我有一个包含 13 个项目的数组,如下所示。
var data =[“MonthFolder/",
"MonthFolder/January",
"MonthFolder/February",
"MonthFolder/March",
"DayFolder/",
"DayFolder/Monday",
"DayFolder/Tuesday",
"DayFolder/Wednesday",
"DayFolder/Thursday",
"YearFolder/",
"YearFolder/2016",
"YearFolder/2015",
"YearFolder/2014"]
我正在尝试打印一个数组,最终结果如下
[("MonthFolder/January","MonthFolder/February","MonthFolder/March"),
("DayFolder/Monday","DayFolder/Tuesday","DayFolder/Wednesday","DayFolder/Thursday"),
("YearFolder/2016", "YearFolder/2015”, "YearFolder/2014")]”
我做到了
var fileName = [AnyObject]()
var allFiles = [AnyObject]()
for item in data{
let keyString = item.characters.last
if keyString != "/"{
fileName.append(item)
}
else if keyString == "/"{
if fileName.count > 0{
allFiles.append(fileName)
fileName = []
}
}
}
得到的输出为
[("MonthFolder/January","MonthFolder/February","MonthFolder/March"),
("DayFolder/Monday","DayFolder/Tuesday","DayFolder/Wednesday","DayFolder/Thursday”)]
缺少 allFiles 中的第三个对象,因为最后一次迭代的 else if 条件失败。我如何实现我想要的输出?谢谢。
我试过了
var data = ["MonthFolder/", "MonthFolder/January", "MonthFolder/February", "MonthFolder/March", "DayFolder/", "DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday", "YearFolder/", "YearFolder/2016", "YearFolder/2015", "YearFolder/2014"];
var fileName = []
for (item in data) {
var keyString = data[item].split("/");
if(keyString[1] == "")
{
var keyV = keyString[0];
fileName[keyV]= new Array();
}
else
{
fileName[keyV].push(data[item]);
}
}
console.log(fileName)
我得到了
这样的输出
[
DayFolder
["DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday"]
MonthFolder
["MonthFolder/January", "MonthFolder/February", "MonthFolder/March"]
YearFolder
["YearFolder/2016", "YearFolder/2015", "YearFolder/2014"]
]
请检查
通过这种方式,您将获得预期的输出:
var fileName = [AnyObject]()
var allFiles = [AnyObject]()
for item in data{
let keyString = item.characters.last
if keyString != "/"{
fileName.append(item)
}
else if keyString == "/"{
if fileName.count > 0{
allFiles.append(fileName)
fileName = []
}
}
}
if fileName.count != 0 {
allFiles.append(fileName)
fileName = []
}
希望这对您有所帮助:)
功能方式:
var data = ["MonthFolder/",
"MonthFolder/January",
"MonthFolder/February",
"MonthFolder/March",
"DayFolder/",
"DayFolder/Monday",
"DayFolder/Tuesday",
"DayFolder/Wednesday",
"DayFolder/Thursday",
"YearFolder/",
"YearFolder/2016",
"YearFolder/2015",
"YearFolder/2014"]
var allFolders = [String]()
var allFiles = [String]()
func gatherFiles(files: [String], inFolders folders: [String]) -> [[String]] {
return folders.map { folder in
return (files.filter { [=10=].containsString(folder)})
}
}
for item in data {
let components = item.componentsSeparatedByString("/").filter({![=10=].isEmpty})
if components.count > 1 {
allFiles.append(item)
} else {
allFolders.append(item)
}
}
let finalArr = gatherFiles(allFiles, inFolders: allFolders)
备注
- 缺点:使用这种方式,迭代次数更多。
- 优点:您可以重复使用它吗?
试试这个
data.forEach { (item) -> () in
if item.characters.last != "/" {
fileName.append(item)
} else if fileName.count > 0 {
allFiles.append(fileName)
fileName = []
}
}
allFiles.append(fileName)
print(allFiles)
您还可以使用基于字典结构的更通用的方法
var filesDict = [String : [String]]()
for fileName in data {
let fileComponents = fileName.componentsSeparatedByString("/")
let fileKey = fileComponents[0]
let fileValue = fileComponents[1]
var itemsArray = filesDict[fileKey]
if itemsArray == nil {
itemsArray = []
}
if fileValue != "" {
itemsArray!.append(fileName)
}
filesDict[fileKey] = itemsArray
}
//conversion from Dictionary to Array
let outputArray = Array(filesDict.values)
print(outputArray)
输出
[["MonthFolder/January", "MonthFolder/February", "MonthFolder/March"],
["DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday"],
["YearFolder/2016", "YearFolder/2015", "YearFolder/2014"]]
我有一个包含 13 个项目的数组,如下所示。
var data =[“MonthFolder/",
"MonthFolder/January",
"MonthFolder/February",
"MonthFolder/March",
"DayFolder/",
"DayFolder/Monday",
"DayFolder/Tuesday",
"DayFolder/Wednesday",
"DayFolder/Thursday",
"YearFolder/",
"YearFolder/2016",
"YearFolder/2015",
"YearFolder/2014"]
我正在尝试打印一个数组,最终结果如下
[("MonthFolder/January","MonthFolder/February","MonthFolder/March"),
("DayFolder/Monday","DayFolder/Tuesday","DayFolder/Wednesday","DayFolder/Thursday"),
("YearFolder/2016", "YearFolder/2015”, "YearFolder/2014")]”
我做到了
var fileName = [AnyObject]()
var allFiles = [AnyObject]()
for item in data{
let keyString = item.characters.last
if keyString != "/"{
fileName.append(item)
}
else if keyString == "/"{
if fileName.count > 0{
allFiles.append(fileName)
fileName = []
}
}
}
得到的输出为
[("MonthFolder/January","MonthFolder/February","MonthFolder/March"),
("DayFolder/Monday","DayFolder/Tuesday","DayFolder/Wednesday","DayFolder/Thursday”)]
缺少 allFiles 中的第三个对象,因为最后一次迭代的 else if 条件失败。我如何实现我想要的输出?谢谢。
我试过了
var data = ["MonthFolder/", "MonthFolder/January", "MonthFolder/February", "MonthFolder/March", "DayFolder/", "DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday", "YearFolder/", "YearFolder/2016", "YearFolder/2015", "YearFolder/2014"]; var fileName = [] for (item in data) { var keyString = data[item].split("/"); if(keyString[1] == "") { var keyV = keyString[0]; fileName[keyV]= new Array(); } else { fileName[keyV].push(data[item]); } } console.log(fileName)
我得到了
这样的输出[ DayFolder ["DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday"] MonthFolder ["MonthFolder/January", "MonthFolder/February", "MonthFolder/March"] YearFolder ["YearFolder/2016", "YearFolder/2015", "YearFolder/2014"] ]
请检查
通过这种方式,您将获得预期的输出:
var fileName = [AnyObject]()
var allFiles = [AnyObject]()
for item in data{
let keyString = item.characters.last
if keyString != "/"{
fileName.append(item)
}
else if keyString == "/"{
if fileName.count > 0{
allFiles.append(fileName)
fileName = []
}
}
}
if fileName.count != 0 {
allFiles.append(fileName)
fileName = []
}
希望这对您有所帮助:)
功能方式:
var data = ["MonthFolder/",
"MonthFolder/January",
"MonthFolder/February",
"MonthFolder/March",
"DayFolder/",
"DayFolder/Monday",
"DayFolder/Tuesday",
"DayFolder/Wednesday",
"DayFolder/Thursday",
"YearFolder/",
"YearFolder/2016",
"YearFolder/2015",
"YearFolder/2014"]
var allFolders = [String]()
var allFiles = [String]()
func gatherFiles(files: [String], inFolders folders: [String]) -> [[String]] {
return folders.map { folder in
return (files.filter { [=10=].containsString(folder)})
}
}
for item in data {
let components = item.componentsSeparatedByString("/").filter({![=10=].isEmpty})
if components.count > 1 {
allFiles.append(item)
} else {
allFolders.append(item)
}
}
let finalArr = gatherFiles(allFiles, inFolders: allFolders)
备注
- 缺点:使用这种方式,迭代次数更多。
- 优点:您可以重复使用它吗?
试试这个
data.forEach { (item) -> () in
if item.characters.last != "/" {
fileName.append(item)
} else if fileName.count > 0 {
allFiles.append(fileName)
fileName = []
}
}
allFiles.append(fileName)
print(allFiles)
您还可以使用基于字典结构的更通用的方法
var filesDict = [String : [String]]()
for fileName in data {
let fileComponents = fileName.componentsSeparatedByString("/")
let fileKey = fileComponents[0]
let fileValue = fileComponents[1]
var itemsArray = filesDict[fileKey]
if itemsArray == nil {
itemsArray = []
}
if fileValue != "" {
itemsArray!.append(fileName)
}
filesDict[fileKey] = itemsArray
}
//conversion from Dictionary to Array
let outputArray = Array(filesDict.values)
print(outputArray)
输出
[["MonthFolder/January", "MonthFolder/February", "MonthFolder/March"],
["DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday"],
["YearFolder/2016", "YearFolder/2015", "YearFolder/2014"]]