import Foundation
struct Item: CustomStringConvertible {
let a: Int
let b: Int
let label: String
var description: String {
"(\(a), \(b), \(label))"
}
}
// Sort by a, then b
func sortData(_ items: [Item]) -> [Item] {
items.sorted {
if $0.a != $1.a {
return $0.a < $1.a
}
return $0.b < $1.b
}
}
// Print all items
func printData(_ items: [Item]) {
for item in items {
print(item)
}
}
// Find first item by label
func findByLabel(_ items: [Item], label: String) -> Item? {
items.first { $0.label == label }
}
// Filter by a
func filterByA(_ items: [Item], value: Int) -> [Item] {
items.filter { $0.a == value }
}
// -----------------------------
// main
// -----------------------------
let data: [Item] = [
Item(a: 7, b: 2, label: "python"),
Item(a: 8, b: 3, label: "c"),
Item(a: 3, b: 5, label: "c++"),
Item(a: 4, b: 1, label: "c#"),
Item(a: 3, b: 2, label: "java"),
Item(a: 7, b: 1, label: "go"),
Item(a: 1, b: 2, label: "rust")
]
let sorted = sortData(data)
print("Sorted data:")
printData(sorted)
print("\nSearching for 'java':")
if let found = findByLabel(sorted, label: "java") {
print(found)
}
print("\nFiltering items where a == 7:")
let filtered = filterByA(sorted, value: 7)
printData(filtered)
/*
run:
Sorted data:
(1, 2, rust)
(3, 2, java)
(3, 5, c++)
(4, 1, c#)
(7, 1, go)
(7, 2, python)
(8, 3, c)
Searching for 'java':
(3, 2, java)
Filtering items where a == 7:
(7, 1, go)
(7, 2, python)
*/