【问题标题】:How can I call or access a specific value in a combination of arrays and structures?如何调用或访问数组和结构组合中的特定值?
【发布时间】:2018-04-11 17:10:42
【问题描述】:

我的学长给了我一个相当奇怪的作业,如下所示。这个线程可能有点长,而且不是最好的方法,所以给这个正确的方向或者只是告诉我一个替代方案都可以。

这就是它的运作方式,这家梦幻银行有 3 种硬币和 3 种外汇可供选择。 “硬币”和“交易所”都代表结构中的基本信息。有一个称为“价格”的相互结构,稍后用于价格调用。

//Coin & Exchange:

//Exchange Struct:
struct Exchange {
    let name: String
    var price: Float?
    var date: Date?

//Initializers:
init(name: String, price: Float?, date: Date?) {
    self.name = name
    self.price = price
    self.date = date
    }
}

//Coin Struct:
struct Coin {
    let name: String
    var price: Float?
    var date: Date?

//Initializers:
init(name: String, price: Float?, date: Date?) {
    self.name = name
    self.price = price
    self.date = date
    }
}

//Price:

//Price Struct:
struct Price {
    let name: String
    var coin: [Coin]
    var exchange: [Exchange]

//Initializers:
init(name: String, coin: [Coin], exchange: [Exchange]) {
    self.name = name
    self.coin = coin
    self.exchange = exchange
    }
}

这里是丑陋的部分,我应该将它们全部放在一个数组中,这也是可以接受的,但有点混乱和基本。我会尽量让它更具可读性。

let pricesTime1: [Price] = 
[Price.init(name: "Coin Rate", coin: 

[
Coin.init(name: "Coin 1", price: 1_200_000, date: Date()), 
Coin.init(name: "Coin 2", price: 600_000, date: Date()), 
Coin.init(name: "Coin 3", price: 1_230_000, date: Date())
],

exchange: 
[
Exchange.init(name: "Exchange 1", price: 4_100, date: Date()), 
Exchange.init(name: "Exchange 2", price: 4_800, date: Date()), 
Exchange.init(name: "Exchange 3", price: 4_700, date: Date())])
]

我有 3 个“pricesTime”,它们的值相似但不同,还有一些“nil”。 这位大四学生要求我在元组中给出这些数组中每个“硬币”和“交换”值的最小值和最大值、第一个和最后一个以及日期的函数。不要介意细节或示例本身,这是为了我的问题信息,但我真的想知道如何访问/调用“Coin 1 Price”,或者按顺序比较“Exchange”的所有价格值做出一个最小和最大的答案。

【问题讨论】:

    标签: arrays swift function struct


    【解决方案1】:

    首先,一些提示:

    使用Exchange(name: String, price: Float?, date: Date?) 代替Exchange.init(name: String, price: Float?, date: Date?)。它将使您的代码更具可读性。

    您可能还想重命名结构中的属性以反映它们是集合,即将coin 重命名为coinsexchanges 重命名为exchanges

    对于给定[Price],访问Coinprice,可以通过下标访问如下:

    let pricesTime1: [Price] = [
       Price(name: "Coin Rate",
          coins: [
             Coin(name: "Coin 1", price: 1_200_000, date: Date()), 
             Coin(name: "Coin 2", price: 600_000, date: Date()), 
             Coin(name: "Coin 3", price: 1_230_000, date: Date())
          ],
          exchanges: [
             Exchange(name: "Exchange 1", price: 4_100, date: Date()), 
             Exchange(name: "Exchange 2", price: 4_800, date: Date()), 
             Exchange(name: "Exchange 3", price: 4_700, date: Date())
          ])
    ]
    
    let priceTime1Price1Coin1Price = priceTimes[0].coins[0].price
    
    // Or if you want to iterate over every coin price
    for price in priceTimes {
       for coin in price.coins {
          print(coin.price)
       }
    }
    

    我无法准确掌握您要完成的工作。但我希望这能给你一些帮助。

    祝你好运:)

    【讨论】:

    • 抱歉回复延迟。谢谢,真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2018-06-08
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多