extension Array {
mutating func fiveHundred() {
var arrCopy = self
arrCopy = arrCopy.reverse()
if arrCopy.count > 0 {
for i in 1..<250 {
print(arrCopy[i])
self.append(arrCopy[i])
}
} else {
print("Array is empty")
}
}
}
在阵列上使用它时会出现错误
&#34;无法转换类型&#39;()&#39;的值到指定的类型&#39; [Double]&#39;&#34;
例如:
var data: [Int] = [1, 2, 3, 4, ..... all the way to 1000]
data.fiveHundred() // Gives error
编辑:看到它已经<250。抱歉!我在另一个有超过250个条目的数据数组上使用它。
假设此数据阵列有超过250个数据。
EDIT2:这是实际代码
struct Data {
let array: [Double] = [1.0, 2.0, 3.0, 4.0]
}
printData(Data.array.fiveHundred) // The function printData(val: [Double])
EDIT3:我道歉。这些例子和问题非常令人困惑。
extension Array where Element: Equatable {
mutating func fiveHundred() -> [Element] {
var arrCopy = self
arrCopy = arrCopy.reverse()
if arrCopy.count > 0 {
for i in 1..<250 {
print(arrCopy[i])
self.append(arrCopy[i])
}
} else {
print("Array is empty")
}
}
}
这解决了我的一部分问题。另一个问题是我最多只需要250个数据。目前是1000.
我想使用data.fiveHundred()来获取250个数据。
EDIT4: 我终于解决了。我感谢所有的帮助。
extension Array其中Element:Equatable {
mutating func fiveHundred() -> [Element] {
var tempArr: [Element] = []
for i in (count-1500)..<count {
tempArr.append(self[i])
}
return tempArr
}
}
给我正确的数组。抱歉让人困惑。下次我必须更清楚地解决有关问题的问题和描述
答案 0 :(得分:1)
print(arrCopy[i])
会出错,因为您的数组是out of index
250
在arrCopy[3]
错误开始后,您可以使用% arrCopy.count
extension Array {
mutating func fiveHundred() {
var arrCopy = self
arrCopy = arrCopy.reverse()
if arrCopy.count > 0 {
for i in 1..<250 {
///print(arrCopy[i])
self.append(arrCopy[i%arrCopy.count])
}
} else {
print("Array is empty")
}
}
}
答案 1 :(得分:1)
我真的不明白你想要达到什么目标。但如果我理解你需要附加反向数组,不超过250个元素,不包括第一个元素,那么这里就是解决方案:
extension Array {
mutating func fiveHundred() {
var arrCopy = self
arrCopy = arrCopy.reverse()
if arrCopy.count > 0 {
let endIndex = arrCopy.count > 250 ? 250 : arrCopy.count
let subArrCopy = arrCopy[1..<endIndex]
self.appendContentsOf(subArrCopy)
} else {
print("Array is empty")
}
}
}
当然,此扩展程序仅适用于var
iables,而不适用于let
- 常量:
var data: [Double] = [1.0, 2.0, 3.0, 4.0]
data.fiveHundred() //ok
print(data)
//[1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0]
print(data.fiveHundred())
//() - because fiveHundred() is void function, it only mutate your array returning void
print(data)
//[1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0] - fiveHundred() mutated data in previous print call
let data: [Double] = [1.0, 2.0, 3.0, 4.0]
data.fiveHundred() //error
答案 2 :(得分:0)
以下是Shadow Of's answer的改进:
extension Array {
mutating func fiveHundred() {
guard self.count > 0 else {
print("Array is empty")
return
}
let endIndex = min(self.count, 250)
self += self.reverse()[1..<endIndex]
}
}