【问题标题】:Swift turn an Array into a grouped Dictionary [duplicate]Swift将一个数组变成一个分组字典[重复]
【发布时间】:2015-10-04 14:40:43
【问题描述】:

我有一个 Transaction 对象数组

var returnedArray: Array<Transaction> = [a, b, c, d]

Transaction 的属性之一是NSDate。我想将我的 Array 转换为 Dictionary

var transactions: [NSDate: Array<Transaction>]

该日期的所有交易都将位于以日期为键的数组中。

我知道如何遍历数组的每个元素并手动将其分配给正确的键,但我想知道是否有一个优雅的函数可以做到这一点。

【问题讨论】:

    标签: swift


    【解决方案1】:

    日期形成一个集合

    var setOfDates = Set (returnedArray.map (transDate))
    

    您可以从一系列对创建字典:

    var result = Dictionary (dictionaryLiteral: setOfDates.map { 
        (date:NSDate) in
      return (date, returnedArray.filter { date == $0.transDate })
    }
    

    您可以将其定义为数组扩展。比如:

    extension Array {
      func splitBy<Key:Hashable> (keyMaker: (T) -> Key) -> Dictionary<Key, T> {
        let theSet = Set (self.map (keyMaker))
        return Dictionary (dictionaryLiteral: theSet.map { (key:Key) in 
           return (key, self.filter { key == keyMaker($0) })
        })
      }
    }
    

    【讨论】:

      【解决方案2】:

      我在黑暗中输入此内容,因为您没有在问题中提供很多细节。你需要即兴发挥:

      // Get the list of distinct dates
      var dates = [NSDate]()
      for tran in returnedArray {
          if !dates.contains(tran.transactionDate) {
              dates.append(tran.transactionDate)
          }
      }
      
      // Now group according to date
      var result = [NSDate : Array<Transaction>]()
      for d in dates {
          let transactions = returnedArray.filter { $0.transactionDate == d } 
          result[d] = transactions
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-20
        • 2018-11-14
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多