如何过滤出第7个字符是冒号的数组对象?

时间:2018-09-02 02:53:53

标签: ios arrays swift filter

编辑:谢谢大家!为了使将来的生活更轻松,我认为我将尝试将字符串转换为一些人建议的独立信息。我是一名初学者程序员,因此学习如何做对我也将是一件好事。再次感谢。

主要问题:如何添加第二个过滤器,以选择第7个字符为冒号的数组字符串?

说明:好的,这确实很具体,但是我需要设置一个数组过滤器,如果冒号在某个点,则该过滤器将能够提取某些字符串。我正在基于将事件记录为“ EP:”(即“ EP102:Cool Episode”)的数组创建一个随机事件生成器。用户还可以选择他们要观看的季节。这是通过过滤包含“ EP(specifiedSeasonNumber)”的情节字符串并仅从中挑选出来的。问题在于,当一个节目有超过9个季节时,例如从第10季中挑选时,程序将从指定的多个季节中挑选一些节目。例如,如果从S10中选择情节标记为EP1014的情节,则还可以选择S1中的前9个情节,因为它们包含EP10(完整:EP105)。

我的理论解决方案是,如果季节号> = 10,则添加另一个过滤器,以确保冒号是字符串中的第7个字符,因为对于季节小于10的情节字符串,这不是正确的。

现有过滤器:

selectFriendsSeasons = epFriends.filter { $0.contains("EP\(seasonNum)")}

请随时询问有关此情况的其他问题。谢谢!

3 个答案:

答案 0 :(得分:0)

您只需要获取整数值并除以100,即可获得季节并截断该集除法中的余数:

let array = ["EP102: Just an Episode from season 1", "EP1002: Cool Episode from season 10"]
let episodes: [(season: String, episode: String, name: String)] = array.compactMap { string -> (String, String, String)? in
    if let range = string.range(of: ":"){
        if let number = Int(string[..<range.lowerBound].dropFirst(2)) {
            print(number)
            let season = number / 100
            let episode = number % 100
            return (String(season), String(episode),String(string[range.upperBound...]))
        }
    }
    return nil
}

episodes.first!.season   // "1"
episodes.first!.episode  // "2"
episodes.first!.name     // " Just an Episode from season 1"

如果要扩展它,可以创建具有所有这些属性的custon TVSerie结构并映射结果:

struct TVSerie {
    let season: String
    let episode: String
    let name: String
}

let series = episodes.map(TVSerie.init)  // [{season "10", episode "2", name " Cool Episode"}]
for serie in series where serie.season == "10" {
    print("season:", serie.season)
    print("episode:", serie.episode)
    print("name:", serie.name)
}

// season: 10
// episode: 2
// name:  Cool Episode from season 10

答案 1 :(得分:0)

您确实应该使用结构来表示情节,而不是玩弄字符串。

您可以使用以下方法检查结肠位置:

$0.index(of: ":") == $0.index($0.startIndex, offsetBy: 6)

答案 2 :(得分:0)

如果您不希望创建合适的struct来更轻松地对数据建模,那么我建议您更改以2位数字而不是1位数字编码季节的方式。语句看起来像:

let seasonNumString = String(seasonNum)
let formattedSeasonNumString: String = seasonNum > 10 ? seasonNumString : "0" + seasonNumString
selectFriendsSeasons = epFriends.filter { $0.contains(formattedSeasonNumString)}