Swift - 根据第二个数组的值对数组进行排序和缩减
Swift - sorting and reducing an array based on values of a second array
我正在使用 NSFetchedResultsController 创建一个 tableView。在每个 tableViewCell 中都有一个金额,在每个部分标题中我想显示每个部分的总金额。例如,我从我的核心数据中获取了一个双精度数组,以获得完整的 table
array = [50.0, 1000.0, 100.0, 50.0]
和第二个数组,每个部分的数量为 objects。
sum = [2, 1, 1]
我的问题是如何枚举第一个数组,然后通过第二个数组减少第一个数组,因此部分总计的结果如下:
newArray = [1050.0, 100.0, 50.0]
也许通过使用 enumerateObjectsUsingBlock?
提前致谢!
这可能不是最有效的答案,但是,我认为它回答了你的问题
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)
解决问题后,我找到了使用另一种技术的解决方案。如果有人感兴趣,我只需要将其添加到我的 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, +)
一个细微的变体,使用切片。
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]
}
我正在使用 NSFetchedResultsController 创建一个 tableView。在每个 tableViewCell 中都有一个金额,在每个部分标题中我想显示每个部分的总金额。例如,我从我的核心数据中获取了一个双精度数组,以获得完整的 table
array = [50.0, 1000.0, 100.0, 50.0]
和第二个数组,每个部分的数量为 objects。
sum = [2, 1, 1]
我的问题是如何枚举第一个数组,然后通过第二个数组减少第一个数组,因此部分总计的结果如下:
newArray = [1050.0, 100.0, 50.0]
也许通过使用 enumerateObjectsUsingBlock?
提前致谢!
这可能不是最有效的答案,但是,我认为它回答了你的问题
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)
解决问题后,我找到了使用另一种技术的解决方案。如果有人感兴趣,我只需要将其添加到我的 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, +)
一个细微的变体,使用切片。
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]
}