在Swift中,是否有一种聪明的方法来使用数组上的高阶方法来返回5个第一个对象? obj-c的方法是保存一个索引,而for-loop则通过数组将索引值递增到5,然后返回新的数组。有办法做到这一点与过滤器,映射或减少?
当前回答
斯威夫特4
一个不同的解决方案:
一个简单的内联解决方案,不会崩溃,如果你的数组太短
[0,1,2,3,4,5].enumerated().compactMap{ $0.offset < 3 ? $0.element : nil }
但是用这个很好。
[0,1,2,3,4,5].enumerated().compactMap{ $0.offset < 1000 ? $0.element : nil }
如果你这样做,通常会崩溃:
[0,1,2,3,4,5].prefix(upTo: 1000) // THIS CRASHES
[0,1,2,3,4,5].prefix(1000) // THIS DOESNT
其他回答
你可以很容易地做到这一点,不需要filter, map, reduce或prefix,只需要通过下标返回数组的一个范围:
var wholeArray = [1, 2, 3, 4, 5, 6]
var n = 5
var firstFiveSlice = wholeArray[0..<n] // 1,2,3,4,5
let firstFiveArray = Array(firstFiveSlice)
Prefix函数绝对是解决这个问题的最有效的方法,但是你也可以像下面这样使用for-in循环:
let array = [1,2,3,4,5,6,7,8,9]
let maxNum = 5
var iterationNumber = 0
var firstNumbers = [Int()]
if array.count > maxNum{
for i in array{
iterationNumber += 1
if iterationNumber <= maxNum{
firstNumbers.append(i)
}
}
firstNumbers.remove(at: 0)
print(firstNumbers)
} else {
print("There were not \(maxNum) items in the array.")
}
这个解决方案占用了很多行代码,但会检查数组中是否有足够的项来执行程序,然后继续并解决问题。 该解决方案使用了许多基本函数,包括数组。Count,它返回数组中项的数量,而不是数组中最后一项的位置。它也使用数组。Append,它把东西添加到数组的末尾。最后,它使用数组。Remove,删除具有指定位置的数组项。
我已经测试过了,它至少适用于swift 5。
简单明了
extension Array {
func first(elementCount: Int) -> Array {
let min = Swift.min(elementCount, count)
return Array(self[0..<min])
}
}
斯威夫特4
要获取Swift数组的前N个元素,可以使用prefix(_ maxLength: Int):
Array(largeArray.prefix(5))
斯威夫特4
一个不同的解决方案:
一个简单的内联解决方案,不会崩溃,如果你的数组太短
[0,1,2,3,4,5].enumerated().compactMap{ $0.offset < 3 ? $0.element : nil }
但是用这个很好。
[0,1,2,3,4,5].enumerated().compactMap{ $0.offset < 1000 ? $0.element : nil }
如果你这样做,通常会崩溃:
[0,1,2,3,4,5].prefix(upTo: 1000) // THIS CRASHES
[0,1,2,3,4,5].prefix(1000) // THIS DOESNT
推荐文章
- equals vs Arrays。Java中的等号
- 如何计算一个NumPy bool数组中的真实元素的数量
- 如何找到一个值的数组索引?
- Python csv字符串到数组
- 如何停止不必要的UIButton动画标题变化?
- 使用Java在原语数组中查找最大/最小值
- 对象作为React子对象无效。如果要呈现子元素的集合,请使用数组
- 如何使用Swift播放声音?
- 越界访问数组有多危险?
- 如何解散ViewController在Swift?
- 保存字符串到NSUserDefaults?
- 如何将JSON字符串转换为字典?
- 什么是NSLocalizedString等效在Swift?
- 如何更新mongodb中的多个数组元素
- 什么时候在数组/数组列表上使用链表?