簡體   English   中英

如何添加到列表中的每個項目(字符串)<int, string> 動態id(int)實際上是里面每個元素的位置?

[英]How can I add to every item (string) inside of the List<int, string> dynamic id (int) which is actually position of every element inside?

我需要為List<int, string>內的每個元素添加一個 id/key。

我嘗試了使用靜態 ID 的方法:

for (int i = 0; i < sen.Length; i++)
{
    mySentences.Add(new Values { ID = i, Sentence = sen[i] });
}

但是這種方法似乎存在一些問題。 我想從列表中間刪除例如項目,然后被刪除項目下的每個項目都應將其 id 更改為 (n - 1)。

那么我該如何申請這個動態id呢?

您可以使用此方法在每次刪除時重新索引您的列表。

public List<Values> ReindexAfterDelete(List<Values> sen) 
    {           
        for (int i = 1; i<= sen.Count; i++) { 
            sen[i-1].ID = i;
        }
        return sen;
    }

您可以在列表中存儲的每個項目中添加對列表的引用。 如果您訪問 ID 屬性,您可以通過List<T>IndexOf方法獲取列表的索引:

public class Sentence
{
   private List<Sentence> list;

   public int ID
   {
     get
     {
       return list.IndexOf(sentence);
     }
   }

   public Sentence(List<Sentence> list)
   {
      this.list = list;
   }
}

用法是:

List<Sentence> mySentences = new List<Sentence>();
Sentence sentence  = new Sentence(mySentences)
mySentences.Add(sentence  );

這種方法有兩個缺點:首先,對ID屬性的每次訪問都是 O(n),如果您有一個包含許多項目的列表,這可能會導致性能問題。 其次,如果您將相同的句子兩次添加到列表中,它將不起作用。

另一方面,最大的優勢是在每次插入、刪除等操作后更新 ID 不會有任何問題。 您可以相信ID始終是正確的。

暫無
暫無

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

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