我想制作一个群组数组
struct songST {
var singerid:[Int]
var songname:[String]
var songembeded:[String]
}
**fist item;**
songST(singerid: "1", songname: ["Its my life"], songembeded: ["url1"])
**seconditem=**
songST(singerid: "1", songname: ["Always"], songembeded: ["url2"])
**i want to make join like this**
songST(singerid: "1", songname: ["Its my life","Always"], songembeded: ["url1","url2"])
如果有相同的歌手比加入 我怎样才能做到这一点?请帮助我。
答案 0 :(得分:1)
我认为您可以改善数据的建模方式。
一首歌曲由以下字段组成:
因此,创建一个具有这些字段的模型是有意义的,而不是为每个字段创建一个数组:
struct Song {
let singerId: Int
let songName: String
let songEmbedded: String
}
接下来,您需要一个包含所有歌曲的数据容器,这些歌曲必须按歌手分组。最简单的方法是使用字典,其键是歌手ID,值是Song
的数组。
如果创建了一个合适的数据容器,它不是手动创建和处理字典,而是更好:
struct Singers {
var singers: [Int : [Song]] = [:]
mutating func addSong(song: Song) {
if self.singers[song.singerId] == nil {
self.singers[song.singerId] = []
}
self.singers[song.singerId]?.append(song)
}
func getSongs(singerId: Int) -> [Song] {
if self.singers[singerId] == nil {
return []
}
return self.singers[singerId]!
}
}
Singers
结构包含一个字典属性,以及两个方法:
addSong
添加一首歌曲,将其分配给由密钥识别的正确数组(歌手ID)getSongs
会返回歌手ID 从故事板中获取的一些示例代码:
let s1 = Song(singerId: 1, songName: "Its my life", songEmbedded: "url1")
let s2 = Song(singerId: 1, songName: "Always", songEmbedded: "url2")
let s3 = Song(singerId: 2, songName: "Another", songEmbedded: "url3")
var singers = Singers()
singers.addSong(s1)
singers.addSong(s2)
singers.addSong(s3)
singers.getSongs(1) // Returns an array of 2 items
singers.getSongs(2) // Returns an array of 1 item
singers.getSongs(3) // Returns an empty array (no song for singer 3)
答案 1 :(得分:0)
易。
你问 - "是否有相同的歌手,而不是加入"。
创建一个使用if语句的函数:
func combineFirstSongST(firstSongST: songST, withSecondSongST secondSongST: songST) -> songST?
{
if firstSongST.singerid != secondSongST.singerid
{
return nil
}
else
{
return songST(singerid: firstSongST.singerid, songname: firstSongST.songName + secondSongST.songName, songembeded: firstSongST.songembeded + secondSongST.songembeded) //single statement
}
}
你应该使用骆驼案。