none
Коллекция с автоинкрементирующимся ключом (C#) RRS feed

  • Вопрос

  • Интересует, есть ли в стандартной библиотеке коллекция вроде Dictionary, но чтобы при добавлении нового элемента автоматически вычислялся уникальный новый ключ. Если нет, что лучше наследовать для реализации подобной функциональности? Dictionary<int,T>?
    1 декабря 2011 г. 12:16

Ответы

  • > чтобы при добавлении нового элемента автоматически вычислялся уникальный новый ключ. Если нет, что лучше наследовать для реализации подобной функциональности?


     
    AutoIncrement реализован в DataTable.
     
    var dt = new DataTable();
    dt.Columns.AddRange(new [] 
    {
        new DataColumn("id", typeof(int)) { AutoIncrement = true, AutoIncrementStep = 3, Unique = true },
        new DataColumn("value", typeof(string)),
    });
    // добавить строку
    dt.Rows.Add(null, "a");
    // или так
    var r = dt.NewRow();
    r["value"] = "b";
    dt.Rows.Add(r);
    
      
    • Помечено в качестве ответа Frostorator 1 декабря 2011 г. 19:29
    1 декабря 2011 г. 12:40
  • Если не удалять элемент, а присваивать null, то не будет сдвигаться. Вопрос только в том, что ещё нужно от Dictionary, что не сможет дать список? Если операций будет очень много с удалением, то наверно такой способ не подойдет.

    Можно унаследоваться от Dictionary и добавить метод Add(T), в котором будет делаться автоинкремент. Если добавлений очень много, можно воспользоваться SortedDictionary.

    • Помечено в качестве ответа Frostorator 1 декабря 2011 г. 19:29
    1 декабря 2011 г. 13:14
    Отвечающий

Все ответы

  • List<T> ? :)
    1 декабря 2011 г. 12:18
    Отвечающий
  • При удалении элемента из List сдвинется индекс последующих, разве нет?
    1 декабря 2011 г. 12:22
  • > чтобы при добавлении нового элемента автоматически вычислялся уникальный новый ключ. Если нет, что лучше наследовать для реализации подобной функциональности?


     
    AutoIncrement реализован в DataTable.
     
    var dt = new DataTable();
    dt.Columns.AddRange(new [] 
    {
        new DataColumn("id", typeof(int)) { AutoIncrement = true, AutoIncrementStep = 3, Unique = true },
        new DataColumn("value", typeof(string)),
    });
    // добавить строку
    dt.Rows.Add(null, "a");
    // или так
    var r = dt.NewRow();
    r["value"] = "b";
    dt.Rows.Add(r);
    
      
    • Помечено в качестве ответа Frostorator 1 декабря 2011 г. 19:29
    1 декабря 2011 г. 12:40
  • Если не удалять элемент, а присваивать null, то не будет сдвигаться. Вопрос только в том, что ещё нужно от Dictionary, что не сможет дать список? Если операций будет очень много с удалением, то наверно такой способ не подойдет.

    Можно унаследоваться от Dictionary и добавить метод Add(T), в котором будет делаться автоинкремент. Если добавлений очень много, можно воспользоваться SortedDictionary.

    • Помечено в качестве ответа Frostorator 1 декабря 2011 г. 19:29
    1 декабря 2011 г. 13:14
    Отвечающий