C # - организованный доступ к объектам с учетом производительности

На основании некоторых комментариев, приведенных ниже, приведен код, как удалить объект на основе имени ключа и значения ключа

 var items = [ 
  { "id": 3.1, "name": "test 3.1"}, 
  { "id": 22, "name": "test 3.1" }, 
  { "id": 23, "name": "changed test 23" } 
  ]

    function removeByKey(array, params){
      array.some(function(item, index) {
        return (array[index][params.key] === params.value) ? !!(array.splice(index, 1)) : false;
      });
      return array;
    }

    var removed = removeByKey(items, {
      key: 'id',
      value: 23
    });

    console.log(removed);
1
задан Vectovox 30 June 2010 в 15:59
поделиться

3 ответа

Мне здесь что-то не хватает, но похоже, что в качестве резервного хранилища вы хотите использовать объект Dictionary, а не массивы.

Время индексации в словаре - O (1). Вы не можете победить постоянное время. :)

Что ж, вы можете, если ваше постоянное время ДЕЙСТВИТЕЛЬНО велико, но оно не для поиска по словарю. Просто убедитесь, что ваш метод GetHashCode дает хороший хеш, и вы должны быть золотыми.

2
ответ дан 2 September 2019 в 23:23
поделиться

почему бы вам не изменить свой класс здесь

class Manager
{
    Foo CreateFoo(/*Some parameters here + Identifier*/)
    {
        // Create a new Foo here AND return it
    }
    void AddFoo(Foo foo)
    {
     // adds to yor collection
    }
    AddBar(/*Moar parameters + Foo instance*/)
    {
        foo.AddBar(/*Params*/);
    }

}
0
ответ дан 2 September 2019 в 23:23
поделиться

Что-то в этом подходе попахивает ... но это только мое мнение.

Я думаю, что многое из того, что вы пытаетесь сделать, можно сделать с помощью инфраструктуры DI, такой как Spring.NET. Это позволит вам создавать и внедрять объекты в ваш код по «понятному имени», не беспокоясь об их точном типе (при условии, что они реализуют определенный интерфейс или расширяют определенный базовый класс).

0
ответ дан 2 September 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: