コード中のPerson配列からキーを指定して並び替えをされた状態の配列を取得したいのですが、シンプルな記述方法がわかりません。簡単に書く方法はありませんか?
この書き方だとキーとなる要素が増えるとswitch文のcaseが増えていってしまいます。
swift
1enum BloodType: Comparable { 2 case A 3 case B 4 case O 5 case AB 6} 7 8enum Sex: Comparable { 9 case mele 10 case female 11} 12 13enum SortKey { 14 case sex 15 case bloodType 16 case height 17 case weight 18} 19 20enum SortOrder { 21 case ascending 22 case descending 23} 24 25class Person { 26 27 let name: String 28 let sex: Sex 29 let bloodType: BloodType 30 var height: Int 31 var weight: Int 32 33 init(name: String, sex: Sex, bloodType: BloodType, height: Int, weight: Int) { 34 self.name = name 35 self.sex = sex 36 self.bloodType = bloodType 37 self.height = height 38 self.weight = weight 39 } 40 41} 42 43class Persons { 44 45 var groupName: String 46 var persons: [Person] = [] 47 48 init(groupName: String) { 49 self.groupName = groupName 50 } 51 52 53 // この部分で並び替えられた配列を取得したいのですが、簡潔な書き方はありませんか? 54 func filterdPersons(sortKey: SortKey, sortOrder: SortOrder) -> [Person] { 55 56 switch (sortKey, sortOrder) { 57 case (.sex, .ascending): 58 return persons.sorted (by: { $0.sex < $1.sex }) 59 case (.sex, .descending): 60 return persons.sorted (by: { $0.sex > $1.sex }) 61 case (.bloodType, .ascending): 62 return persons.sorted (by: { $0.bloodType < $1.bloodType }) 63 case (.bloodType, .descending): 64 return persons.sorted (by: { $0.bloodType > $1.bloodType }) 65 case (.height, .ascending): 66 return persons.sorted (by: { $0.height < $1.height }) 67 case (.height, .descending): 68 return persons.sorted (by: { $0.height > $1.height }) 69 case (.weight, .ascending): 70 return persons.sorted (by: { $0.weight < $1.weight }) 71 case (.weight, .descending): 72 return persons.sorted (by: { $0.weight > $1.weight }) 73 } 74 } 75 76}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/27 07:56