簡體   English   中英

從字典中的引用中刪除數組中的特定對象

[英]Removing specific objects in arrays from references in dictionary

我的問題 :

我需要知道我在做什么是最好的方法,如果不是,那是什么?

情況:

我在數組中有“聯系人”對象。 這些聯系人必須按字母順序排列,並且可以有多個電話號碼。 我將該數組拆分為27個聯系人數組,每個聯系人代表一個字母。 所以我擁有所有的“ A”聯系人,然后是“ B”,依此類推。 另外,在“拆分”期間,我還在字典中添加了每個聯系人的引用,其中對象是聯系人,鍵是他的電話號碼。

因為一個聯系人可以擁有X個電話號碼,所以在字典中的X個不同條目中,同一個聯系人可以是X倍。 我需要它,以便我可以找到任何號碼的任何聯系人。

以上所有作品都具有魅力。

現在,我需要比較在線數據庫中的所有這些數字(注意:我正在使用parse),以查看其中的某些聯系人是否已經是用戶。 如果是這樣,則需要將它們放在我的表格視圖的特定部分。 (我的表視圖就是所有聯系人,並在字母部分中加上一個“用戶”部分)。 並且聯系人不能出現在用戶部分和字母部分中。 如果聯系人是用戶,則必須與他分開。

我在問什么與我在做什么:

現在,我只是重新循環每個數組,並將每個元素與我在網上找到的所有用戶進行比較。 這是很多循環,看起來很浪費時間和資源。

我想做的事情:考慮到我的字典中有接觸對象的引用,以某種方式清理我發現的用戶數組。

TL; DR:

我的數組:

用戶在第一部分中,然后按字母順序聯系

[[user1,user2,user3,...],[a1,a2,a3,...],[b1,b2,...],...]

我的字典:

  • a1-電話1
  • a1-phone2
  • a1-phone3
  • a2-電話1
  • A3-Phone1
  • ...

最終問題:

我可以很容易地找到聯系人對象(因為我從在線數據庫中獲得了他的電話號碼)。 如果我與字典中的a1交互,是否還會更改數組數組中的a1? 更具體地說,考慮到我不知道他在哪一個,我可以以某種方式從陣列中刪除它嗎?

我還在字典中添加了每個聯系人的引用,其中對象是聯系人,鍵是他的電話號碼。

使用這種方法時需要非常小心。 可能會發生碰撞。 雖然手機號碼通常是唯一的,但有時它們是共享的。 家庭和工作號碼通常是共享的。 電話號碼將被重新分配,因此您的數據庫也可以通過這種方式重復。 有時人們只是輸入錯誤的數據。 在這種情況下,您必須確保系統行為合理且一致。 許多行為都可以,但是“隨意選擇”通常不行。

您應該在這里仔細考慮什么是模型和什么是演示文稿。 一個數據結構應該是事實的唯一來源。 通常,這將是您的主要聯系人列表。 這與它的顯示方式完全無關。 我們稱其為模型。 由於順序無關緊要,因此通常將其作為NSSet跟蹤。

除此之外,您應該有一個“視圖模型”來處理分組和排序問題。 這不是“真相”。 每當基礎數據發生較大變化時,您都應該願意丟棄它。 它的數據結構應指向基礎模型,並應以與表視圖所需的條件完全匹配的方式進行存儲。 使模型和視圖模型保持分離是使復雜性得到控制的最佳方法之一。 然后,您知道數據可以在一個唯一的地方更改(模型),其他所有內容都會對此做出反應。

關於您的分區問題:因此,您有一個聯系人列表,並且您希望根據其電話號碼是否出現在另一個列表中將其分為兩組。 如果您的總列表只有幾十個條目,那么坦白地說,這無關緊要。 對於足夠小的n,即使O(n ^ 2)也可以。 首先要專注於使其簡單可靠,然后再通過Instruments進行分析,以了解真正的瓶頸在哪里。

也就是說,確定集合交集的最快方法通常是對兩個集合進行排序並同時遍歷兩個集合。 因此,您將創建一個包含“電話號碼+聯系人指針”的“聯系人”數組和一個僅包含電話號碼的“用戶”數組。 通過電話號碼對它們進行排序。 遍歷它們,比較每個列表的當前元素,然后遞增較小列表的索引。 如果不匹配,則將聯系人放在一個列表中。 如果匹配,將其放在另一個。

但是我可能只是將所有電話號碼放在一個集合中並使用member:查找它們。 通常只是更簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM