编辑:谢谢大家!为了使将来的生活更轻松,我认为我将尝试将字符串转换为一些人建议的独立信息。我是一名初学者程序员,因此学习如何做对我也将是一件好事。再次感谢。
主要问题:如何添加第二个过滤器,以选择第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)")}
请随时询问有关此情况的其他问题。谢谢!
答案 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)}