首页 > 解决方案 > 在数组中搜索一个值 [swift]

问题描述

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

我有一个数组,创建如下:

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])")
}

它返回错误:

类型“赔率”没有成员“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
    }

}

标签: arraysswiftsorting

解决方案


你可以这样做:

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:)


推荐阅读