我怎么能这样做?从数组中取出前n个元素:
newNumbers = numbers[0..n]
Run Code Online (Sandbox Code Playgroud)
目前收到以下错误:
error: could not find an overload for 'subscript' that accepts the supplied arguments
Run Code Online (Sandbox Code Playgroud)
编辑:
这是我正在工作的功能.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = numbers[0...position]
return newNumbers
}
Run Code Online (Sandbox Code Playgroud)
Cez*_*cik 164
这对我有用:
var test = [1, 2, 3]
var n = 2
var test2 = test[0..<n]
Run Code Online (Sandbox Code Playgroud)
您的问题可能与您开始声明阵列的方式有关.
编辑:
要修复您的功能,您必须将您Slice转换为数组:
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = Array(numbers[0..<position])
return newNumbers
}
// test
aFunction([1, 2, 3], 2) // returns [1, 2]
Run Code Online (Sandbox Code Playgroud)
Ima*_*tit 87
使用Swift 4,当你写:
let newNumbers = numbers[0...position]
Run Code Online (Sandbox Code Playgroud)
Array不是类型,newNumbers而是类型Array<Int>.这是因为ArraySlice<Int>的Array返回subscript(_:?),根据苹果,呈现视图到一些较大的阵列的存储.
此外,Swift还提供了一个ArraySlice<Element>初始化器Array,允许我们从init(_:?)(包括sequence)创建一个新的数组.
因此,您可以使用以下四种方法之一来获取数组前n个元素的新数组.
ArraySlice带有范围的下标您可以使用subscript(_:?)标有init(_:?),Array,prefix(_:)或prefix(_:)为了得到一个数组的第一个元素的序列.
用法:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array[0..<3] // using Range
//let arraySlice = array[0...2] // using ClosedRange also works
//let arraySlice = array[..<3] // using PartialRangeUpTo also works
//let arraySlice = array[...2] // using PartialRangeThrough also works
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
Run Code Online (Sandbox Code Playgroud)
Collection的Array方法Swift为prefix(_:)符合Array协议(包括newNumbers)的类型提供了一种方法.Array<Int>有以下声明:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
Run Code Online (Sandbox Code Playgroud)
返回一个子序列,最长为maxLength,包含初始元素.
Apple还声明:
如果最大长度超过集合中的元素数,则结果将包含集合中的所有元素.
用法:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array.prefix(3)
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
Run Code Online (Sandbox Code Playgroud)
以下Playground代码显示为创建一个返回前n个元素的全局函数ArraySlice<Int>:
let newNumbers = numbers[0...position]
Run Code Online (Sandbox Code Playgroud)
Array扩展自定义方法以下Playground代码显示ho以创建subscript(_:?)扩展自定义方法,该方法返回以下的前n个元素ArraySlice<Element>:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array[0..<3] // using Range
//let arraySlice = array[0...2] // using ClosedRange also works
//let arraySlice = array[..<3] // using PartialRangeUpTo also works
//let arraySlice = array[...2] // using PartialRangeThrough also works
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
Run Code Online (Sandbox Code Playgroud)
func subArray<T>(array: [T], range: NSRange) -> [T] {
if range.location > array.count {
return []
}
return Array(array[range.location..<min(range.length, array.count)])
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85428 次 |
| 最近记录: |