Reputation: 37
I want to create one array from this one array that is 2d array
var array1 = [apples,oranges,grapes,vegetables,soups]
var arraylist = [[apples,oranges,grapes],[vegetables,soups]]
Upvotes: 0
Views: 100
Reputation: 2916
You can achieve this with simple loop though also, if you have only these 5 elements and you wants to separate them with code only.
var array1 = ["apples","oranges","grapes","vegetables","soups"]
var arraylist:[[String]] = [[String]]()
var innerArray: [String] = [String]()
var isFirstTime: Bool = true
for obj in array1 {
if isFirstTime {
innerArray.append(obj)
if innerArray.count == 3 {
arraylist.append(innerArray)
innerArray.removeAll()
isFirstTime = false
}
} else {
innerArray.append(obj)
if innerArray.count == 2 {
arraylist.append(innerArray)
innerArray.removeAll()
}
}
}
print(arraylist)
Results: [["apples", "oranges", "grapes"], ["vegetables", "soups"]]
Upvotes: 1
Reputation: 16774
What you have written is completely valid in Swift. Consider the following:
let apples = "apples"
let oranges = "oranges"
let grapes = "grapes"
let vegetables = "vegetables"
let soups = "soups"
var array1 = [apples, oranges, grapes, vegetables, soups]
var arraylist = [[apples, oranges, grapes], [vegetables, soups]]
Now adding types these two are:
var array1: [String] = [apples, oranges, grapes, vegetables, soups]
var arraylist: [[String]] = [[apples, oranges, grapes], [vegetables, soups]]
In general you can create groups which define how your array should be split. Check the following:
// Constants
let apples = "apples"
let oranges = "oranges"
let grapes = "grapes"
let vegetables = "vegetables"
let soups = "soups"
// Groups of items
let groups: [[String]] = {
let fruits: [String] = [apples, oranges, grapes]
let misc: [String] = [vegetables, soups]
return [fruits, misc]
}()
// Array to seperate by group
let inputArray: [String] = [apples, oranges, grapes, vegetables, soups]
// Array of arrays of items per group. Outputs [["apples", "oranges", "grapes"], ["vegetables", "soups"]]
let grouppedArray: [[String]] = {
return groups.compactMap { group in
let filteredArray = inputArray.filter { group.contains($0) }
return filteredArray.isEmpty ? nil : filteredArray
}
}()
Upvotes: 0