Arrays 识别数组中的重复项

Arrays 识别数组中的重复项,arrays,swift,swift2,Arrays,Swift,Swift2,我有一个自定义对象数组,想知道如何识别哪些对象是重复的。我知道如何删除重复项,但这不是我想要的功能。我用的是swift 2 例如: var movies: [Movie] = ["Batman v Superman: Dawn of Justice", "Batman v Superman: Dawn of Justice", "Deadpool"," "Deadpool", "Hardcore Henry", "Jason Bourne", "Jurassic World"] 所以我想显示一

我有一个自定义对象数组,想知道如何识别哪些对象是重复的。我知道如何删除重复项,但这不是我想要的功能。我用的是swift 2

例如:

var movies: [Movie] = ["Batman v Superman: Dawn of Justice", "Batman v Superman: Dawn of Justice", "Deadpool"," "Deadpool", "Hardcore Henry", "Jason Bourne", "Jurassic World"]
所以我想显示一个表视图,上面有电影列表,但突出显示了蝙蝠侠和死池

为了更清楚地了解我想要实现的目标,请查看屏幕截图。我有两个用户在上一个视图控制器中选择的电影列表。我想在表视图中显示选定的电影。我想特别展示两人是否都选择了电影


为什么不在电影对象中添加id

并比较搜索同一对象的两个数组

public class Movie:Equatable{
    var id=NSUUID().UUIDString
}

public func ==(lhs: Movie, rhs: Movie) -> Bool{
    return lhs.id == rhs.id
}
比较阵列:

    var moviesA=[Movie]()
    var moviesB=[Movie]()

    var sharedMovies=[Movie]()
    for movie in moviesA{
        if moviesB.contains(movie){
            sharedMovies.append(movie)
        }
    }

为什么不在电影对象中添加id

并比较搜索同一对象的两个数组

public class Movie:Equatable{
    var id=NSUUID().UUIDString
}

public func ==(lhs: Movie, rhs: Movie) -> Bool{
    return lhs.id == rhs.id
}
比较阵列:

    var moviesA=[Movie]()
    var moviesB=[Movie]()

    var sharedMovies=[Movie]()
    for movie in moviesA{
        if moviesB.contains(movie){
            sharedMovies.append(movie)
        }
    }

根据您的评论,我制作了一个简单的字符串数组示例,可以轻松地将其转换为您的电影类型:

let movies = ["Batman","Batman","Flash","Avengers"]
var movieCounts:[String:Int] = [:]    
for movie in movies {
 movieCounts[movie] = (movieCounts[movie] ?? 0) + 1
}
你可以这样测试它:

for (key, value) in movieCounts {
 print("\(key) has been selected \(value) time/s")
}

根据您的评论,我制作了一个简单的字符串数组示例,可以轻松地将其转换为您的电影类型:

let movies = ["Batman","Batman","Flash","Avengers"]
var movieCounts:[String:Int] = [:]    
for movie in movies {
 movieCounts[movie] = (movieCounts[movie] ?? 0) + 1
}
你可以这样测试它:

for (key, value) in movieCounts {
 print("\(key) has been selected \(value) time/s")
}

不确定你想要做什么功能

若仅针对项目列表,您可以使用swift字典对重复项进行计数,方法是使用电影名称作为键,计数作为从0开始的值


如果要突出显示,可以在委托方法中填充表格时使用不同的样式,方法是检查项目是否有重复项。

不确定要执行哪些功能

若仅针对项目列表,您可以使用swift字典对重复项进行计数,方法是使用电影名称作为键,计数作为从0开始的值


如果要突出显示,可以在委托方法中填充表格时使用不同的样式,方法是检查项目是否有重复项。

我通常尽量避免使用完全由其他人编写的代码发布答案,但是下面的参考文献非常适合这个问题,我相信它值得作为一个答案

该解决方案使用了与公认答案相同的技术,但采用了一种更为通用的形式,并通过对字典的整洁下标扩展进行了压缩:from:

看一看框架中的许多其他序列好东西:


我通常会尽量避免使用完全由其他人编写的代码发布答案,但下面的参考资料非常适合这个问题,因此我认为值得将其作为答案

该解决方案使用了与公认答案相同的技术,但采用了一种更为通用的形式,并通过对字典的整洁下标扩展进行了压缩:from:

看一看框架中的许多其他序列好东西:


是否只显示多次选定的电影?e、 g.蝙蝠侠对超人?@tech4242我想展示所有选定的电影。如果一部电影被多次选中,我会在表视图中将蓝色框改为绿色。这有道理吗?对不起,我不确定我是否能理解你的意思-你所说的身份是什么意思?这样用户就可以很容易地识别出他们都选择了同一部电影。你想只播放多次选择的电影吗?e、 g.蝙蝠侠对超人?@tech4242我想展示所有选定的电影。如果一部电影被多次选中,我会在表视图中将蓝色框改为绿色。这有道理吗?对不起,我不确定我能听懂你的话-你说的身份是什么意思?这样用户就可以很容易地确定他们都选择了同一部不起作用的电影。movies.containsmovie永远是真的。对,我完全理解,但这只是重复的电影。我如何在展示蝙蝠侠被两人选中的同时也展示《闪电侠》和《复仇者》呢?很难在课文中说清楚对不起,我会尽量说清楚的。这是应用程序的流程。一个用户从电影列表中选择电影。另一个用户从电影列表中选择电影。我将两个列表合并到一个数组中。我想显示列表,并显示是否有相同电影的任何副本,因为这表明他们选择了相同的电影。@ToxinedApps好的,我已经编辑了我的答案:现在字典保存了这些事件,您可以相应地操作=>如果某个键值的值int>1=>show keyThank!我试试看,那不行。movies.containsmovie永远是真的。对,我完全理解,但这只是重复的电影。我如何在展示蝙蝠侠被两人选中的同时也展示《闪电侠》和《复仇者》呢?很难在课文中说清楚对不起,我会尽量说清楚的。这是应用程序的流程。一个用户从电影列表中选择电影。另一个用户从电影列表中选择电影。我将两个列表合并到一个数组中。我想显示列表,并显示是否有与此相同的电影的任何副本
d显示他们选择了同一部电影。@TownedApps好的,我已经编辑了我的答案:现在字典保存了这些事件,如果某个键值的值int>1=>ShowKeyThank!我试试看