Использование списков структур имеет смысл в какао?

Используйте приведенный ниже код, чтобы получить ваши потребности

arraytouse.map(obj => {
  return Object.keys(obj).reduce((acc,o)=>{
    acc[o] = obj[o]
    return acc
  }, {})
})

В простой форме

arraytouse.map(obj => {
     var robj = {}
     for(o in obj) robj[o] = obj[o]
     return robj
})
5
задан Community 23 May 2017 в 12:19
поделиться

3 ответа

Какао имеет несколько общих типов, которые являются структурами, не объектами: NSPoint, NSRect, NSRange (и их дубликаты CG).

Когда в сомнении, последуйте примеру Какао. Если Вы имеете дело с большим количеством маленьких, главным-образом-объектов-данных, Вы могли бы хотеть сделать их структурами вместо этого для эффективности.

Используя NSArray/NSMutableArray, поскольку контейнер верхнего уровня и обертывание структур в NSValue, вероятно, сделают Вашу жизнь намного легче. Я только перешел бы к прямому массиву C-типа, если Вы находите, что NSArray узкое место производительности, или возможно если массив чрезвычайно только для чтения.

11
ответ дан 18 December 2019 в 13:20
поделиться

Это удобно и полезно время от времени использовать структуры, особенно когда Вы имеете к выпадающему к C, такому, работая с существующей библиотекой или делая системный материал уровня. Иногда Вы просто хотите компактную структуру данных без издержек класса. При необходимости во многих экземплярах таких структур это может оказать реальное влияние на производительность и объем потребляемой памяти.

Другой способ сделать массив структур состоит в том, чтобы использовать класс NSPointerArray. Это берет немного более мысль для установки, но это работает в значительной степени точно так же, как NSArray после этого и Вы не должны беспокоиться упаковкой/распаковыванием, или обертывание в класс, настолько получающий доступ к данным, более удобно, и это не поднимает дополнительную память класса.

NSPointerFunctions *pf = [[NSPointerFunctions alloc] initWithOptions:NSPointerFunctionsMallocMemory |
                          NSPointerFunctionsStructPersonality |
                          NSPointerFunctionsCopyIn];
pf.sizeFunction = keventSizeFunction;
self.pending = [[NSPointerArray alloc] initWithPointerFunctions:pf];
2
ответ дан 18 December 2019 в 13:20
поделиться

В целом использование структуры подразумевает существование относительно простого типа данных, который не имеет никакой логики, связанной с ним, ни должен иметь любую логику, связанную с ним. Возьмите NSPoint например - это просто (x, y) представление. Учитывая это, существуют также некоторые проблемы, которые являются результатом, это - использование. В целом это хорошо для этого типа данных, как мы обычно замечаем для разнообразия в точке, а не y-координате точки (существенно, (0,1) не то же как (1,1) смещенный вниз на 1 единицу). Если это - нежелательное поведение, это может быть лучшая идея использовать класс.

1
ответ дан 18 December 2019 в 13:20
поделиться
Другие вопросы по тегам:

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