【发布时间】:2018-12-15 11:04:58
【问题描述】:
我正在尝试用部分填充 TableView。其中艺术家是部门名称,该艺术家的所有歌曲都在下面列出。共有100多名艺术家。像这样
FirstArtist
- Song 1
- Song 2
SecondArtist
- Song 1
- Song 2
OneMoreArtist...
我有一个对象数组 Song
struct Song {
let songName: String?
let album: String?
let artist: String?
}
var songs = [Song]()
以及所有艺术家姓名的数组
var artists = [String]()
据我了解,要使用部分填充 tableView,我需要一个以 Artist 作为键并以歌曲数组作为值的字典,就像这样
var toShow = [String : [Song]]()
那么,我正在尝试循环
for artist in artists {
for song in songs {
if song.artist == artist {
toShow[artist] = [song]
// toShow[artist]?.append(song)
}
}
}
但它不起作用。
可能我走错路了。
这种情况有什么解决办法?
谢谢
更新
做了一个结构
struct ArtistWithSongs {
let name: String
let songs: [Song]
init(name: String, songs: [Song]) {
self.name = name
self.songs = songs
}
}
并试图循环
var artistWithSongs = [ArtistWithSongs]()
for artist in artists {
for song in songs {
if artist == song.artist {
artistWithSongs.append(ArtistWithSongs(name: song, songs: [song]))
}
}
}
但显然,我的循环变体是不正确的。现在我得到一个包含重复键的对象数组,每个键只有一首歌曲。好像
[Atrist1 : [Song1], Artist1 : [Song2], Artist1 : [Song3], ...]
我的问题是 - 制作循环的正确方法是什么,或者是否有可能以某种方式将具有相同键的对象合并到字典中以获取 [Artist1 :[Song1, Song2, Song3]]?
【问题讨论】:
标签: arrays swift uitableview dictionary