我如何在swift中加入数组相同的id?

时间:2015-03-04 12:02:53

标签: arrays swift

我想制作一个群组数组

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"])

如果有相同的歌手比加入 我怎样才能做到这一点?请帮助我。

2 个答案:

答案 0 :(得分:1)

我认为您可以改善数据的建模方式。

一首歌曲由以下字段组成:

  • 歌手id
  • 歌名
  • song url

因此,创建一个具有这些字段的模型是有意义的,而不是为每个字段创建一个数组:

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
  }
}

你应该使用骆驼案。