如何解决这个Swift问题(AP CP原则-结构)
我目前正在浏览苹果的课程书籍,偶然发现了一个我无法理解的问题 有一个结构:如何解决这个Swift问题(AP CP原则-结构),swift,for-loop,struct,Swift,For Loop,Struct,我目前正在浏览苹果的课程书籍,偶然发现了一个我无法理解的问题 有一个结构: struct Song { let title: String let artist: String let duration: Int var longestSong = false } 还有一个包含4首不同持续时间的歌曲的数组:90200150440 这本书要求添加一种方法来检查一首歌是否比另一首歌长 因此,基于之前的材料,我在结构中添加了以下方法: func isLongerTh
struct Song {
let title: String
let artist: String
let duration: Int
var longestSong = false
}
还有一个包含4首不同持续时间的歌曲的数组:90200150440
这本书要求添加一种方法来检查一首歌是否比另一首歌长
因此,基于之前的材料,我在结构中添加了以下方法:
func isLongerThan(_ song: Song) -> Bool {
return duration > song.duration
}
}
然后,该书要求使用一个循环来查找数组中最长的歌曲,并将其打印到控制台
(提示:使用变量跟踪最长的歌曲并初始化。)
将其复制到数组中的第一个。)
所以,我想出了这个循环:
for (index, _) in songs.enumerated() {
if index < songs.count-1{
if songs[index].isLongerThan(songs[index + 1]){
songs[index].longestSong = true
print("\(songs[index].title) is longer than \(songs[index+1].title)")
}
} else {
if songs[songs.count-1].isLongerThan(songs[0]){
songs[songs.count-1].longestSong = true
print("\(songs[songs.count-1].title) is longer than \(songs[0].title)")
}
}
}
用于歌曲中的(索引,u)。枚举(){
如果索引
下一步是将这些歌曲与longestSong=true变量进行比较,直到只剩下一首歌曲。但在我看来,这不是一个好的解决方案
有没有更好更优雅的方法来解决这个问题
UPD
看来我看错了说明书,走错了方向。
在一些帮助下,我设法找到了这个解决方案:
func searchForLongestSong(songs: [Song]) {
var lngstSongIndex = 0
for song in 0..<songs.count {
if songs[song].duration > songs[lngstSongIndex].duration {
lngstSongIndex = song
}
}
print("The longst song is \"\(songs[lngstSongIndex].title)\"")
}
searchForLongestSong(songs: songs)
func搜索最长的歌曲(歌曲:[歌曲]){
变量lngstSongIndex=0
对于0中的歌曲。歌曲[lngstSongIndex]。持续时间{
lngstSongIndex=歌曲
}
}
打印(“最长的歌曲是\”\(歌曲[lngstSongIndex].title)\“”)
}
搜索最长的歌曲(歌曲:歌曲)
由于它是一个数组
您可以通过保存最长歌曲的索引来跟踪“最长歌曲”
创建Int
var
以保存索引
循环0中n的索引
。您应该使用一个变量来跟踪最长的歌曲,但您已经创建了一个属性longest
,因此返回使用变量var longest=songs[0]
然后使用一个带范围的基本for循环对更新进行注释,因为您只在函数searchforlongestsongindex
中使用变量lngstSongIndex
,它应该在该函数中声明。始终在使用变量的范围内声明变量。非常感谢。现在这个问题看起来很简单,通常是这样。你在读什么书?“在Swift AP CS原则中发展”,这是苹果官方课程的一部分(由3本书组成)。他们在今年早些时候更新了它。你可以在图书应用程序中免费找到这本书。