2015-10-21 20 views
-1

所以我有一個列表框,我已經與刪除一個列表框項會保留它的索引號嗎?

hi - 0 
hello - 1 
abc - 2 
dog - 3 
cat - 4 
bear - 5 

值填充它(#表示其索引值),如果我要刪除的條目貓 - 4將承擔爲4的索引值或它仍然會保持在指數值5嗎?

+0

如果你已經擁有了它,你可以嘗試一下,檢查結果.. –

+0

列表框指數代表列表中的當前索引。如果您刪除某個項目,則刪除項目後的所有索引都會更改。在你的例子中,如果你刪除除'dog'之外的所有項目,將只有一個索引爲「0」的項目。 –

+0

謝謝,有沒有一種巧妙的方法來保存索引的值,以便我可以使用這個值的其他東西?我能想到的唯一方法是運行一個循環來存儲所有索引值,然後刪除這些項目。 – Vince

回答

0

不,上述元素不會保留他們的舊索引 - 他們將洗牌。這是因爲它們存儲爲鏈接列表(List<T>),因此列表中的任何間隙都會實際上打破鏈條,任何超出「間隙」的元素都將無法訪問。

鏈接列表通過讓每個元素存儲對下一個存儲器位置的引用(如果您熟悉C++,請考慮指針)。所以如果一個元素被刪除。該對象必須通過在元素之前重新鏈接元素之後重新鏈接元素來「修復」列表。如前所述,如果鏈接不固定(並且固定鏈接意味着元素向下移動),那麼除去被刪除元素之外的元素將不可訪問。

例如,假設我有string與下面的索引位置下列元素的List<T>

0 - "Bob" 
1 - "Joe" 
2 - "Bill" 

這種工作方式是,鮑勃將舉行喬參考,和喬將有一個提及比爾。所以當你訪問一個索引時,會調用遞歸算法,從0開始(Bob)並獲取下一個元素的引用。這個過程對於兩個索引重複兩次(得到Bob的參考(Joe),然後得到那個(Bill)的索引,這是你的索引二)。它根本不會發生索引爲0,因爲0是起始元素,所以它只會返回它。

最後一點是不是你的問題確實相關,但希望你學到新的東西:)

+0

'列表'不是「鏈接列表」。描述它只是混淆了事情。 –

+0

哦,我的道歉 - 我以爲這是一個鏈表結構!感謝您解決這個問題。你知道什麼? –

+0

從[文檔](https://msdn.microsoft.com/en-us/library/6sh2ey19(v = vs.110).aspx):_「它通過使用數組的大小實現IList 通用接口根據需要動態增加。「_ –

-2
var listArray = yourListbox.items 

foreach(var iem in listArray) 
{ 
    Console.WriteLine(item.ToString()); 
} 
+1

我知道你建議OP應該測試他的問題,而且你是對的,但是你認爲你可以在你的答案中解釋嗎?另外 - 不要太迂腐,但我認爲'var iem'應該是'var item';) –

相關問題