我有兩個列表。有沒有簡單的方法從數組中刪除項目?
char *name[] = {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN"};
char *name_to_remove[] = {"RGS", "O", "NRGY"};
有沒有一種有效的方法來獲取項目列表並從另一個列表中刪除它?我已經實現了我自己的版本,但我認爲它效率很低。它基本上製作了一個名稱列表的副本,然後使用一個嵌套for循環,通過重複名稱& name_to_remove列表並標記任何重複「刪除」的項目。最後,我瀏覽列表並複製除了值爲'remove'的項目之外的所有項目。它可怕的醜陋,我懷疑效率低下。我有麻煩的問題(之前沒有處理過)是我不確定如果它可能從數組中刪除一個項目,如果該數組是一個固定大小的內存,所以我最初試圖改變值,然後將這些值添加到新數組中(與原始大小相同 - 我想要移除的項目數組的大小)。
我看不到更好的方式來做到這一點,似乎memcmp有前途的,因爲它可以比較兩個列表,但我一直無法理解它如何適應。我知道C不是蟒蛇,但這裏是我如何做到這一點乾淨的python:
for item in name_to_remove:
name_copy.remove(item)
也許場景下,python命令是做盡可能多的圈,因爲我做什麼,但我認爲我會問。
如何將一個鏈表是有用的嗎? – goat
@chris因爲如果'name'是一個鏈表,你可以釋放()需要刪除的節點(並將前一個節點的「next」指針重新指向下一個節點)。但是,鏈表的開銷是否值得,完全取決於你需要多久修改一次(中途)列表/數組。根據情況,動態數組或純靜態數組可能是更好的選擇。 – Will