所以我有一个类的对象数组,为简化起见,这就是我的类的样子:
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"的字符串。 "第二" "第三" "第四"所以我无法对此进行评论。
答案 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,我们都会查看
在比较序列之前,我的代码剥离了非数字字符
select user_id, max(created_at) as last_created_at from your_table group by user_id;