【问题标题】:Searching objects created by struct搜索结构创建的对象
【发布时间】:2016-07-20 18:51:37
【问题描述】:

我想搜索结构创建的对象。

假设这些是我们由Candy struct 创建的对象。

candies = [
  Candy(category:"Chocolate", name:"Chocolate Bar"),
  Candy(category:"Chocolate", name:"Chocolate Chip"),
  Candy(category:"Chocolate", name:"Dark Chocolate"),
  Candy(category:"Hard", name:"Lollipop"),
  Candy(category:"Hard", name:"Candy Cane"),
  Candy(category:"Hard", name:"Jaw Breaker"),
  Candy(category:"Other", name:"Caramel"),
  Candy(category:"Other", name:"Sour Chew"),
  Candy(category:"Other", name:"Gummi Bear")
]

我们如何在不创建两个数组并通过索引查找对象的情况下找到“棒棒糖”元素的类别?

【问题讨论】:

    标签: swift struct swift-structs


    【解决方案1】:

    就这个:

    candies.first { $0.name == "Lollipop" }
    

    如果您预计会有多个“棒棒糖”,那么:

    candies.filter { $0.name == "Lollipop" }
    

    在行动:

     13> struct Candy { 
     14.     let cat: String 
     15.     let name: String 
     16. } 
     17> var candies = [ 
     18.     Candy (cat: "Hard", name: "Lollipop"), 
     19.     Candy (cat: "Hard", name: "Jaw Breaker") 
     20.     ] 
    candies: [Candy] = 2 values {
      [0] = {
        cat = "Hard"
        name = "Lollipop"
      }
      [1] = {
        cat = "Hard"
        name = "Jaw Breaker"
      }
    }
    
     21> candies.first { $0.name == "Lollipop" } 
    $R1: Candy? = (cat = "Hard", name = "Lollipop")
    
     22> candies.filter { $0.name == "Lollipop" } 
    $R2: [Candy] = 1 value {
      [0] = {
        cat = "Hard"
        name = "Lollipop"
      }
    }
    

    【讨论】:

    • 你的candies.first { $0.name == "Lollipop" } 很酷。但恐怕它只适用于 Swift 3:在 Swift 2 中,.first 只是数组中第一个对象的属性,没有方法可以接受这样的谓词。值得一提的是,IMO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多