试图快速删除从firebase检索到的数组中的重复值
Posted
技术标签:
【中文标题】试图快速删除从firebase检索到的数组中的重复值【英文标题】:Trying to erase duplicated values in array retrieved from firebase in swift 【发布时间】:2020-07-21 12:10:35 【问题描述】:我正在尝试从 firebase 字典中检索名为 memberJob
的值。在我检索它之后,目标是删除重复项,在 TableView 中显示唯一值。
问题是 jobs
是空的,但 memberJob
在循环时实际上有值。
也许有人可以帮助我! :)
import UIKit
import FirebaseDatabase
import Foundation
import FirebaseFirestoreSwift
import CodableFirebase
class ProjectCharacterViewController: UIViewController
// MARK: - Properties
@IBOutlet weak var specTxt: UITextField!
@IBOutlet weak var difficultyTxt: UITextField!
@IBOutlet weak var budgetTxt: UITextField!
@IBOutlet weak var tableView: UITableView!
var member = [TeamMember]()
var jobs: [String] = []
var uniqueJobs = [MemberJobsStruct]()
var soloJobs: [String] = []
var singleJobs: [String] = []
var test = ["Hallo", "Birne", "Apfel"]
override func viewDidLoad()
super.viewDidLoad()
getJobs(for: User.current) (memberJob) in
self.uniqueJobs = memberJob
soloJobs = removeDuplicates(array: jobs)
print("SoloJobs :", soloJobs)
DispatchQueue.main.async
self.tableView.reloadData()
// MARK: - Functions
func gettheJob()
soloJobs = removeDuplicates(array: jobs)
print("These are the unique Jobs: ", soloJobs)
func getJobs(for user: User, completion: @escaping ([MemberJobsStruct]) -> Void)
let ref = Database.database().reference().child("team").child(user.uid)
ref.observe(DataEventType.value, with: snapshot in
for case let child as DataSnapshot in snapshot.children
guard let value = child.value as? [String: Any] else
return completion ([])
let memberJob = value["memberJob"] as! String
self.jobs.append(memberJob)
)
func removeDuplicates(array: [String]) -> [String]
var encountered = Set<String>()
var result: [String] = []
for value in array
if encountered.contains(value)
// Do not add a duplicate element.
else
// Add value to the set.
encountered.insert(value)
// ... Append the value.
result.append(value)
return result
// MARK: - UITableViewDataSource
extension ProjectCharacterViewController: UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return soloJobs.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// let job = jobs[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "ProjectCharacterTableViewCell") as! ProjectCharacterTableViewCell
cell.jobLabel.text = soloJobs[indexPath.row]
return cell
// MARK: - UITableViewDelegate
extension ProjectCharacterViewController: UITableViewDelegate
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 60
更新:我试图简单地创建一个新数组 soloJobs
out of jobs
,但即使这样也不起作用。做这样的事情的正确方法是什么?现在我尝试了几种方法,包括这个,但没有任何效果......
func getJobs(for user: User, completion: @escaping ([MemberJobsStruct]) -> Void)
var jobs: [String] = []
let ref = Database.database().reference().child("team").child(user.uid)
ref.observe(DataEventType.value, with: snapshot in
for case let child as DataSnapshot in snapshot.children
guard let value = child.value as? [String: Any] else
return completion ([])
let memberJob = value["memberJob"] as! String
jobs.append(memberJob)
DispatchQueue.main.async
self.tableView.reloadData()
)
soloJobs = jobs
【问题讨论】:
你在哪里使用removeDuplicates
?
还没有......因为数组本身仍然是空的。该功能正在运行。我只需要得到工作数组
如果您不想在数据库中出现重复,更有效的方法是在添加记录之前检查重复。
不不,非常需要重复!只是在这个 vc 中,我希望人们选择所需的工作数量。不同的团队成员配置文件正在获取作业。但如果以3个摄像师为例,显然1x摄像师就足够展示了,所以要选择数量
【参考方案1】:
在getJobs
方法附加jobs
之后,您可能只是缺少应该重新加载UITableView
的部分。
func getJobs(for user: User, completion: @escaping ([MemberJobsStruct]) -> Void)
//...
ref.observe(DataEventType.value, with: snapshot in
for case let child as DataSnapshot in snapshot.children
//...
DispatchQueue.main.async
self.tableView.reloadData()
)
更新:使用 here 的扩展方法从数组中获取唯一对象。
【讨论】:
谢谢!它现在实际上工作了 buuuuut 我想实际删除重复项并将唯一变量存储在一个名为soloJobs
的新数组中,因此只在表格视图中显示这些变量。但实际上它不起作用。我将问题中的代码修改为新代码?还有其他帮助吗? :)
检查我在上面发布的更新以从数组中删除重复项。使用它,你会得到你的结果。
这很奇怪,我只是不明白。为什么我什至不能在不删除重复值的情况下从jobs
中创建一个名为soloJobs
的新数组?我几乎尝试了所有可能性......现在在我的问题的更新区域这是我的方法,但是没有任何效果......以上是关于试图快速删除从firebase检索到的数组中的重复值的主要内容,如果未能解决你的问题,请参考以下文章
Firebase/Android:将检索到的值从 Firebase 添加到 arraylist 会返回空指针异常
每当我尝试在从 firebase 检索到的地图上显示位置时,都会出现错误 [重复]
在firebase中的数组中添加一个字段而不删除firebase中的其他字段[重复]
我如何从firebase检索数据到android listview顶部[重复]