swift - 我在整合字典中的数据时遇到问题

标签 swift for-loop dictionary

这是用 swift 写的,但它更多的是一个逻辑问题,希望有人能帮忙解决,我一直在开发一个应用程序,它会收取费用,然后根据“欠款”中指定的用户在用户之间分配总计费用的属性(property)。我能够通过为所有用户创建一个字典来分配总数,其中键是他们的名字,值是每个其他用户的更多字典,键是其他用户的名字,值是数量欠款(如果欠父字典的钱是正数,相反是负数),我现在的问题是合并所有的钱,以便所有用户的欠款额相互分配(例如:如果用户 1 欠用户 2 10 美元但是 User2 欠 User3 $5 然后 User1 现在只欠 User2 $5 但现在还欠 User3 $5 并且 User2 的债务被清除) 我知道它似乎与 dictionary-inception 混淆,但这里有一个字典示例,以及指向我的 .playground 的链接,它显示了我正在尝试做什么以及如何设置它的想法,最后一个 for 循环是问题,也许有更好的方法?

User1[
    User2: -20
    User3: 10
    User4: -5
]
User2[
    User1: 20
    User3: -15
    User4: 0
]

要点链接: https://gist.github.com/wilks7/0c5e3ab4f5d95c945579

Playground 文件: https://www.dropbox.com/s/6h2iuic84un2uh3/expenseSplit.playground.zip?dl=0

最佳答案

您要建模的本质上是一个 Directed Acyclic Graph .但是,如果您需要对关系进行的查询相对简单(即列出每个人的未付金额),那么您可以使用一些面向对象的建模而不是完整的 DAG。构造类和与尝试使用数组和/或字典完成相同的事情相比,在这些类中嵌入逻辑将使您的代码更易于阅读。

一个骨架示例是:

public class Debt {

  var owedBy: Person
  var amount: Float

  init(amount: Float, from: Person) {
    self.amount = amount
    self.owedBy = from
  }
}

public class Person {
  var name: String
  var loans: [Debt] = []

  init(name: String) {
    self.name = name
  }

  public func addLoan(debt: Debt) {
    loans.append(debt)
  }

  public func showLoans() {
    print("\(name):")
    for debt in loans {
      print("Owed \(debt.amount) by \(debt.owedBy.name)")
    }
  }
}

这将允许您创建贷款并使用如下代码显示存在的内容:

let Bill = Person(name: "Bill")
let Tony = Person(name: "Tony")

Bill.addLoan(Debt(amount: 20.0, from: Tony))
Bill.showLoans()

如上所示为 Bill 调用 showLoans() 会产生:

Bill:
 Owed 20.0 by Tony

关于swift - 我在整合字典中的数据时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34304486/

相关文章:

ios - 如何在 Swift 中正确触发/调用 "selector"?

for-loop - 打印星号的三角形图案

python - 在 Python 中,是否在执行新迭代之前重新评估循环中的条件?

perl - Perl 中 $map{$string} 和 $map->{$string} 之间的区别

swift - 如何创建具有不同数据类型的数据结构?

ios - 这是 iOS 的哪个 UI 元素?

iOS - Swift - 使用数组和条件循环

c++ - 为什么 operator[] 不允许用于映射但允许用于 int 数组?

java - 使用我自己的字典创建 CMUSphinx 语言模型后的下一步是什么?

swift - 动画 View 以隐藏/缩放到其右下角