Ios 在Swift中比较数组值后移动索引值的问题

Ios 在Swift中比较数组值后移动索引值的问题,ios,arrays,swift,Ios,Arrays,Swift,这本书有一个章节表。 let chapterList=self.bookDetail。书籍章节列表 ->7,49,73109163195236241 我将此字符串更改为数组 它将与self.bookPage 如果self.bookPage为25 如果我点击上一章的标签, 如果self.bookPage想要转到章节列表中的7 如果self.bookPage为68 如果我点击上一章的标签, 我想self.bookPage转到列表上的第49章 @IBAction func previousChapte

这本书有一个章节表。
let chapterList=self.bookDetail。书籍章节列表
->7,49,73109163195236241

我将此字符串更改为数组

它将与
self.bookPage

如果
self.bookPage
为25

如果我点击上一章的标签, 如果
self.bookPage
想要转到章节列表中的7

如果
self.bookPage
为68

如果我点击上一章的标签, 我想
self.bookPage
转到列表上的第49章

@IBAction func previousChapterBtnTapped(_ sender: Any) {
        // ["7", "13", "113", "245", "311", "427"]
        let chapterListArr = bookDetail?.bookChapterList.components(separatedBy: ",")

    <<<i need...>>>
    <<< I will need to compare chapterListArr and self.bookPage. Please let me know your grammar.>>>    
    }
@iAction func PreviousChapterbntaped(uu-sender:Any){
// ["7", "13", "113", "245", "311", "427"]
let chapterListArr=bookDetail?.bookChapterList.components(以“,”分隔)
>    
}

根据我对上述信息的理解,您需要使用pages数组进入特定章节。制作一个类似于章节开始或结束的标志,以及标识此页面为章节开始或结束的页面数组

您可以保留两个单独的数组,一个包含页面,另一个包含章节信息。 只需比较两个数组,章节将出现在页面中,因为同一页面响应开始和结束

如果我对更详细的信息有错误,请纠正我


很高兴帮助您,快乐编码:)

根据我对上述信息的理解,您需要转到特定章节,但使用pages数组。制作一个类似于章节开始或结束的标志,以及标识此页面为章节开始或结束的页面数组

您可以保留两个单独的数组,一个包含页面,另一个包含章节信息。 只需比较两个数组,章节将出现在页面中,因为同一页面响应开始和结束

如果我对更详细的信息有错误,请纠正我


很高兴帮助你,很高兴编码:)

那么你想知道这是哪一章

    var array = ["7", "13", "113", "245", "311", "427"].map{Int($0)!}

public func getChapter(from page: Int) {
    var currentChapter = 0
    array.enumerated().forEach({ (offset, chapterBeginning) in
        if page >= chapterBeginning {
            currentChapter = offset+1
        }
    })

    print(currentChapter)
}

getChapter(from: 311)

这将为您提供当前章节。如果页面大于或等于章节开头,请将其转换为int并查看每个位置。

那么您想知道它是哪一章吗

    var array = ["7", "13", "113", "245", "311", "427"].map{Int($0)!}

public func getChapter(from page: Int) {
    var currentChapter = 0
    array.enumerated().forEach({ (offset, chapterBeginning) in
        if page >= chapterBeginning {
            currentChapter = offset+1
        }
    })

    print(currentChapter)
}

getChapter(from: 311)

这将为您提供当前章节。将其转换为int,如果页面大于或等于章节开头,则查看每个位置。

假设
bookChapterList
总是按数字排序,您可以首先将字符串转换为
int
,颠倒整个过程,不断删除元素,直到元素小于页码,然后再拿第一个

let intChapterList = chapterListArr.map { Int($0)! }
self.bookPage = intChapterList.reversed().drop(while: { $0 >= self.bookPage }).first ?? 1

请注意,我使用了
??1
如果所有的元素都已经完成(这意味着我们首先在第一章),我们就回到第一页。如果您的书的第一页由
0
指示,请将其更改为
??0

假设
bookChapterList
总是按数字排序,您可以首先将字符串转换为
Int
,将整个过程颠倒过来,继续删除元素,直到元素小于页码,然后取第一个

let intChapterList = chapterListArr.map { Int($0)! }
self.bookPage = intChapterList.reversed().drop(while: { $0 >= self.bookPage }).first ?? 1

请注意,我使用了
??1
如果所有的元素都已经完成(这意味着我们首先在第一章),我们就回到第一页。如果您的书的第一页由
0
指示,请将其更改为
??0

将章节转换为整数数组,并使用lastIndex查找上一章节

let chapterListArr =  bookDetail?.bookChapterList.components(separatedBy: ",").compactMap { Int($0) } 

let index = chapterListArr.lastIndex(where: { $0 <= bookPage}) ?? 0
bookPage = chapterListArr[index]
let chapterListArr=bookDetail?.bookChapterList.components(以“,”分隔)。compactMap{Int($0)}

让index=chapterListArr.lastIndex(其中:{$0将章节转换为整数数组,并使用lastIndex查找上一章节

let chapterListArr =  bookDetail?.bookChapterList.components(separatedBy: ",").compactMap { Int($0) } 

let index = chapterListArr.lastIndex(where: { $0 <= bookPage}) ?? 0
bookPage = chapterListArr[index]
let chapterListArr=bookDetail?.bookChapterList.components(以“,”分隔)。compactMap{Int($0)}

let index=chapterListArr.lastIndex(其中:{$0您需要
值,该值小于您指定的
书页
Int
值?我不理解您的要求properly@PGDev这个链接是在寻找确切数字时的一个比较。他想知道的是哪个数字是当前书页下面最接近的数字。例如:if chapter begins在7处,在12处结束,当前页面是10,他想要7作为结果。或者1作为第1章。您需要小于您指定的
bookPage
Int
值的
chapter
值?我不理解您的要求properly@PGDev当寻找一个确切的数字时,这个链接是一个比较o找出当前书页下面最接近的数字是什么。例如:如果章节从7开始到12结束,当前页面是10,那么他想要7作为结果。或者1作为第一章。即使OP没有指定这一点,也可以使用
@ielyamani true,但如果我们在第二章的第二页,OP想要转到同一章节的第一页章节即使函数名为
previouschapterbtnattaped
,我想我还是坚持使用
,即使OP没有指定,也可以使用
@ielyamani true,但是如果我们在章节的第二页,OP希望转到同一章节的第一页,即使函数名为
previouschapterbtnattaped
所以我想我还是坚持