数组中的数组 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"]]