Swift - сортировка и уменьшение массива на основе значений второго массива - PullRequest
0 голосов
/ 10 мая 2018

Я создаю табличное представление с NSFetchedResultsController. В каждом tableViewCell есть сумма, и в каждом заголовке раздела я хочу отобразить общие суммы для каждого раздела. Например, у меня есть массив значений типа double из моих основных данных для полной таблицы

array = [50.0, 1000.0, 100.0, 50.0]

и второй массив с количеством объектов для каждого раздела.

sum = [2, 1, 1]

Мой вопрос заключается в том, как перечислить, а затем уменьшить первый массив до второго, чтобы итоговые значения для раздела были следующими:

newArray = [1050.0, 100.0, 50.0]

Возможно, используя enumerateObjectsUsingBlock?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

После работы над проблемой я нашел решение, используя другую технику.Если кому-то это интересно, мне нужно только добавить это в мой метод viewForHeaderInSection:

var totalArray = [Double]()    

for i in 0...self.fetchedItemResultsController.sections![section].numberOfObjects-1 {
    let new = self.fetchedItemResultsController.sections![section].objects![i] as! Item
    totalArray.append(new.amount)
}

let amounts = totalArray.reduce(0, +)
0 голосов
/ 13 мая 2018

Небольшой вариант с использованием ломтиков.

let array = [50.0, 1000.0, 100.0, 50.0]
let numberInSections = [2, 1, 1]

var sumOfSections : [Double] = []
for _ in numberInSections { sumOfSections.append(0)}
var firstIndex = 0

for index in 0..<numberInSections.count {
  let lastIndex = firstIndex+numberInSections[index]
  if lastIndex > array.count { break }
  let sliceSum = array[firstIndex..<lastIndex].reduce(0, +)
  sumOfSections[index] = sliceSum
  firstIndex += numberInSections[index]
}
0 голосов
/ 10 мая 2018

Это может быть не самый эффективный ответ, однако, я думаю, что он отвечает на то, что вы спрашиваете

let array = [50.0, 1000.0, 100.0, 50.0]
let sum = [2, 1, 1]
var newArray = [Double]()

//Ensures that the amount of values you want to check in 'sum' doesn't
//exceed the amount of elements in 'array'
if sum.reduce(0, +) <= array.count {
    let val = sum[i]
    var total = 0.0

    for x in 0..<val {
        if x < array.count {
            total += array[index]
        }
        else {
            break
        }
        index += 1
    }
    newArray.append(total)
}
print(newArray)
...