Created
July 11, 2016 18:11
-
-
Save kmussel/7c5ba251c0a6c1f254f84d7ef072041b to your computer and use it in GitHub Desktop.
swift sorting
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct Favorite : CustomStringConvertible{ | |
let ID: Int! | |
let name: String! | |
let category: Category! | |
// CustomStringConvertible conformance | |
var description : String { | |
return name | |
} | |
} | |
typealias Category = String | |
struct FavoritesDisplayAssistant { | |
/* | |
* Arguments: | |
* favorites: an array of favorites | |
* Return: | |
* It returns a sorted list of Tuples with elements (Category, [Favorite]) | |
* the Tuples are sorted alphabetically by Category | |
* The Favorites inside the Tuples are each sorted alphabetically by name | |
*/ | |
static func sortForDisplay(favorites: [Favorite]) -> [(Category, [Favorite])] { | |
// your code here | |
var sortedFavs = [Category: [Favorite]]() | |
let sortedArray = favorites.sort({ | |
$0.name < $1.name | |
}) | |
for fav in sortedArray { | |
if var val = sortedFavs[fav.category] { | |
val.append(fav) | |
sortedFavs[fav.category] = val | |
}else { | |
sortedFavs[fav.category] = [fav] | |
} | |
} | |
let favsorted = sortedFavs.sort{ $0.0 < $1.0 } | |
return favsorted | |
} | |
/* | |
* Arguments | |
* -favorites: array of favorites that may or may not already exist in Tuples | |
* -tuples: array of (Category, Favorite) tuples that may or may not be sorted | |
* | |
* Return | |
* It returns a sorted list of Tuples with elements (Category, [Favorite]) | |
* the Tuples are sorted alphabetically by Category | |
* The Favorites inside the Tuples are each sorted alphabetically by name | |
* | |
* Hint: favorites are considered the 'same' if their ID's are equal | |
*/ | |
static func addNew(favorites: [Favorite], toTuples tuples: [(Category, [Favorite])]) -> [(Category, [Favorite])] { | |
// your code here | |
let fm = tuples.flatMap { $0.1 } | |
var allfavs = [Favorite](favorites) | |
for c in fm { | |
if(!favorites.contains { $0.ID == c.ID }) { | |
allfavs.append(c) | |
} | |
} | |
return sortForDisplay(allfavs) | |
} | |
} | |
let favorite1 = Favorite(ID: 1, name: "Dojo", category: "Gym") | |
let favorite2 = Favorite(ID: 2, name: "Orange Theory", category: "Gym") | |
let favorite3 = Favorite(ID: 3, name: "Equinox", category: "Gym") | |
let favorite4 = Favorite(ID: 4, name: "Solidcore", category: "Gym") | |
let favorite5 = Favorite(ID: 5, name: "Trader Joe's", category: "Grocery") | |
let favorite6 = Favorite(ID: 6, name: "Whole Foods", category: "Grocery") | |
let favorite7 = Favorite(ID: 7, name: "Safeway", category: "Grocery") | |
let favorite8 = Favorite(ID: 8, name: "Chipotle", category: "Restaurant") | |
let favorite9 = Favorite(ID: 9, name: "Subway", category: "Restaurant") | |
let favorite10 = Favorite(ID: 10, name: "Capital Grill", category: "Restaurant") | |
// creating assistant -- example usage starts here! | |
// let unsorted = [grocerCategory,gymCategory,restaurantCategory] | |
let unsorted = [favorite1,favorite2,favorite3,favorite4,favorite5,favorite6,favorite7,favorite8,favorite9,favorite10] | |
let sorted = FavoritesDisplayAssistant.sortForDisplay(unsorted) | |
let favorite11 = Favorite(ID: 11, name: "Jamba Juice", category: "Juicery") | |
let favorite12 = Favorite(ID: 6, name: "Whole Foods", category: "Upscale Grocery") | |
let favorite13 = Favorite(ID: 13, name: "Crunch", category: "Gym") | |
let newSorted = FavoritesDisplayAssistant.addNew([favorite11,favorite12,favorite13], toTuples: sorted) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment