回答編集履歴

2 修正

_Kentarou

_Kentarou score 8197

2018/05/05 10:45  投稿

文字列(タイム)を配列で保持していると思いますので、配列を以下の用にソートしてみてください。
```swift
// ↓ 例にあった時間の配列
var timeArray = ["03.45", "01.55", "05.05", "01.23", "00.23"]
timeArray.sort()
// timeArray => ["00.23", "01.23", "01.55", "03.45", "05.05"]
```  
 
以下回答追記  
---  
 
情報を分けた配列で持つのは大変なので、一つの案として`UserDefaults`に保存できるクラスにしてみるのはどうでしょう?  
※ 数が多くなるようであれば`DB`の使用なども考えた方がよいと思いますが。  
古いですが参考URL: [Swiftオブジェクトの配列をNSUserDefaultsに保存する](https://qiita.com/paming/items/a93b8572f65275eb1dd4)  
 
```swift  
import UIKit  
 
class ViewController: UIViewController {  
     
   override func viewDidLoad() {  
       super.viewDidLoad()  
         
       let item1 = Item(time: "01.55", date: "2018/05/05", compareTime: 01.55)  
       let item2 = Item(time: "01.23", date: "2018/05/04", compareTime: 1.23)  
       let item3 = Item(time: "00.23", date: "2018/05/06", compareTime: 0.23)  
       let saveItems = [item1, item2, item3]  
         
       // 保存  
       let userDefaults = UserDefaults.standard  
       let archivedObject = NSKeyedArchiver.archivedData(withRootObject: saveItems)  
       userDefaults.set(archivedObject, forKey: "ItemSaveKey")  
       userDefaults.synchronize()  
         
       // 取得  
       var resultItems: [Item] = []  
       if let itemData = userDefaults.object(forKey: "ItemSaveKey") as? Data,  
          let getItems = NSKeyedUnarchiver.unarchiveObject(with: itemData) as? [Item] {  
             
           // ソート  
           resultItems = getItems.sorted{ $0.time < $1.time }  
       }  
         
       // resultItems => [Item(time: "00.23", date: "2018/05/06", compareTime: 0.23),  
       //                Item(time: "01.23", date: "2018/05/04", compareTime: 1.23),  
       //                Item(time: "01.55", date: "2018/05/05", compareTime: 01.55)]  
   }  
}  
 
 
class Item: NSObject, NSCoding {  
     
   enum ItemKey: String {  
       case itemTimeKey  
       case itemDateKey  
       case itemCompareTimeKey  
   }  
     
   /// タイム表示用  
   var time: String  
   /// 日付  
   var date: String  
   /// タイム比較用  
   var compareTime: Double  
     
   init(time: String, date: String, compareTime: Double) {  
       self.time = time  
       self.date = date  
       self.compareTime = compareTime  
   }  
     
   required init?(coder aDecoder: NSCoder) {  
       guard let time = aDecoder.decodeObject(forKey: Item.ItemKey.itemTimeKey.rawValue) as? String,  
           let date = aDecoder.decodeObject(forKey: Item.ItemKey.itemDateKey.rawValue) as? String else {  
               return nil  
       }  
       self.time = time  
       self.date = date  
       self.compareTime = aDecoder.decodeDouble(forKey: Item.ItemKey.itemCompareTimeKey.rawValue)  
   }  
     
   func encode(with aCoder: NSCoder) {  
       aCoder.encode(time, forKey: Item.ItemKey.itemTimeKey.rawValue)  
       aCoder.encode(date, forKey: Item.ItemKey.itemDateKey.rawValue)  
       aCoder.encode(compareTime, forKey: Item.ItemKey.itemCompareTimeKey.rawValue)  
   }  
}  
 
 
```
1 修正

_Kentarou

_Kentarou score 8197

2018/05/04 16:07  投稿

文字列で時間を配列で保持していると思いますので、配列を以下の用にソートしてみてください。
文字列(タイム)を配列で保持していると思いますので、配列を以下の用にソートしてみてください。
```swift
// ↓ 例にあった時間の配列
var timeArray = ["03.45", "01.55", "05.05", "01.23", "00.23"]
timeArray.sort()
// timeArray => ["00.23", "01.23", "01.55", "03.45", "05.05"]
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る