2016-04-14 14 views
0

Ich habe ein Array wie folgt mit 13 Elementen.Array in Array Swift

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"] 

Ich versuche, wie unten

[("MonthFolder/January","MonthFolder/February","MonthFolder/March"), 
("DayFolder/Monday","DayFolder/Tuesday","DayFolder/Wednesday","DayFolder/Thursday"), 
("YearFolder/2016", "YearFolder/2015”, "YearFolder/2014")]” 

ein Array mit Endergebnis drucken ich dieses

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 = [] 
     } 
    } 
} 

und bekam die Ausgabe als

[("MonthFolder/January","MonthFolder/February","MonthFolder/March"), 
("DayFolder/Monday","DayFolder/Tuesday","DayFolder/Wednesday","DayFolder/Thursday”)] 

getan haben, fehlt das dritte Objekt in allFiles bec Verwenden Sie andernfalls die Else, wenn die Bedingung für die letzte Iteration fehlschlägt. Wie erreiche ich meine gewünschte Leistung? Vielen Dank.

+0

Haben Sie meine Antwort überprüft verwenden kann? – Pushpa

+0

Danke Pushpa. Das hat funktioniert. – Rio

+0

@Rio Wenn es funktioniert, signieren Sie die Pushpa-Antwort als richtig – Andrea

Antwort

0

Auf diese Weise werden Sie Ausgang zu erwarten erhalten:

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 = [] 
} 

Hoffnung das wird dir helfen :)

0

Ich habe schon versucht, diese

 


    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) 

und ich bekam eine Ausgabe wie

 
[ 


DayFolder 
    ["DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday"] 

MonthFolder 
    ["MonthFolder/January", "MonthFolder/February", "MonthFolder/March"] 

YearFolder 
    ["YearFolder/2016", "YearFolder/2015", "YearFolder/2014"] 
    ] 

Bitte überprüfen

0

Functional Art und Weise:

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 { $0.containsString(folder)}) 
     } 
    } 

for item in data { 
    let components = item.componentsSeparatedByString("/").filter({!$0.isEmpty}) 
    if components.count > 1 { 
     allFiles.append(item) 
    } else { 
     allFolders.append(item) 
    } 
} 

let finalArr = gatherFiles(allFiles, inFolders: allFolders) 

Hinweis

  • Nachteile: Mit dieser Art und Weise, es gibt mehr Iterationen.
  • Pro: Sie könnten es wiederverwenden?
0

Versuchen Sie, diese

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) 
0

Sie auch allgemeinere Ansatz basiert auf Wörterbuch struct

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) 

Ausgang

[["MonthFolder/January", "MonthFolder/February", "MonthFolder/March"], 
["DayFolder/Monday", "DayFolder/Tuesday", "DayFolder/Wednesday", "DayFolder/Thursday"], 
["YearFolder/2016", "YearFolder/2015", "YearFolder/2014"]]