Поиск в массиве по значению [swift] - PullRequest
0 голосов
/ 28 октября 2018

Просто начал учиться быстро, потратил несколько часов, пытаясь понять это, ища здесь, но пока не повезло.

У меня есть массив, созданный так:

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 голосов
/ 28 октября 2018

Вы можете сделать это так:

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

...