如何从数组

时间:2015-06-09 21:56:32

标签: ios swift

所以我有一个类的对象数组,为简化起见,这就是我的类的样子:

class CD {

    var artist: String!
    var title: String!
    var tracks: Int!
    var sequence: String!

}

var allCDs:[CD]= []

然后我有一堆" CD"对象。我想创建一个新的数组,只为 每个艺术家的最新CD,让我们称之为

var latestCDArray:[CD]= []

以下情况不可能,但会让您了解我尝试做的事情:

for disc in allCDs {

    if disc.title != (any other CD.titles in array) && disc.sequence == highest {

        latestCDArray.append(disc)

    }

}

我遇到的真正问题是尝试将标题与数组中的其他人匹配。我无法做到这一点,我必须说所有CD [0]或所有CD [1],但不能使用多个标题。

此外,"序列" property是一个类似" 1st"的字符串。 "第二" "第三" "第四"所以我无法对此进行评论。

2 个答案:

答案 0 :(得分:0)

听起来你有数据结构问题而不是编码问题。

我会更喜欢这样组织,

class Artist {
    var artistName: String!
    var artistCDs = NSMutableSet()
}

class CD {
    var tracks: Int!
    var releaseDate: NSDate!
    var sequence: String!
    weak var artist: Artist?
}

现在,您可以将所有艺术家存储在他们自己的阵列中,并通过releaseDate属性轻松获取最新的CD。

请注意CD类中对Artist的弱引用,以确保我们没有保留周期。我也使用NSMutableSet而不是NSMutableArray,因为你很可能不想要同一张CD的重复。

现在,您可以在Artist类中设置自定义构造函数,以自动获取艺术家名称和预制CD对象。

我提前为任何语法问题道歉,我以前从未写过任何Swift,随时可以编辑我的答案。

根据您的尝试,您可以使用结构或NSDictionary与制作类。

答案 1 :(得分:0)

由于您的数据格式,没有" easy"从数组中检索数据的方法 - 您需要遍历数组并确定"最新的" cd为每个艺术家。

我的方法如下。

它创建了一个字典,用于存储"最新的"我们迭代数组时每个艺术家的CD。对于每张CD,我们都会查看

  • 如果我们看过这位艺术家的另一张CD(艺术家的词典条目是/ isn' t null)
  • 如果没有,那么只需将此CD添加到词典
  • 如果有,请更新字典,如果我们找到了"稍后" CD
  • 最后将字典值提取回数组

在比较序列之前,我的代码剥离了非数字字符

select user_id, max(created_at) as last_created_at from your_table group by user_id;