在数组中搜索值[swift]

时间:2018-10-28 19:09:40

标签: arrays swift sorting

刚开始学习敏捷,花了几个小时试图通过在这里搜索来解决这个问题,但到目前为止还没有运气。

我有一个像这样创建的数组:

class ProbabilitiesClass {
    var list = [Odds]()

    init() {
        list.append(Odds(dateInit: -35, oddsTodayInit: "0,01", sevenDaysInit: "0,2"))
        list.append(Odds(dateInit: -34, oddsTodayInit: "0,01", sevenDaysInit: "0,3"))
        list.append(Odds(dateInit: -33, oddsTodayInit: "0,02", sevenDaysInit: "0,4"))

我想在此数组的第一个参数中搜索整数并返回其索引。

尝试过

if let i = Odds.firstIndex(where: { $0.hasPrefix(differenceInDays) }) {
    print("index is \([i])")
}

它返回错误:

  

类型'Odds'没有成员'firstIndex'

最终目标是返回该索引的第二个和第三个参数。

更新:我这样定义赔率:

import Foundation

class Odds {
    let dateText : Int
    let oddsToday : String
    let odds7Days : String

    init(dateInit: Int, oddsTodayInit: String, sevenDaysInit : String) {
        dateText = dateInit
        oddsToday = oddsTodayInit
        odds7Days = sevenDaysInit
    }

}

1 个答案:

答案 0 :(得分:1)

您可以这样做:

let p = ProbabilitiesClass()
let differenceInDays = -34
if let i = p.list.firstIndex(where: { $0.dateText == differenceInDays }) {
    print("index is \([i])")   //index is [1]
}

list实例的ProbabilitiesClass属性中查找索引。就像错误消息说的那样:类Odds不是要在其上使用方法firstIndex(where:)的数组。


如果您要使用第一个元素的属性,该元素的dateInit等于differenceInDays,则可以这样做:

if let first = p.list.first(where: { $0.dateText == differenceInDays }) {
    print("oddsTodayInit =", first.oddsToday)
    print("sevenDaysInit =", first.odds7Days)
}

它使用此功能first(where:)