Arrays 字符串的变异swift数组(swift 2)
我有一个字符串数组。例如,这:Arrays 字符串的变异swift数组(swift 2),arrays,swift,swift2,Arrays,Swift,Swift2,我有一个字符串数组。例如,这: var stringArray1 = ["abcdef", "bcdefg", "cdefgh"] 我想改变数组,去掉每个字符串的前3个字符。结果是: var newStringArray1 = ["def", "efg", "fgh"] 从苹果的文档中,我尝试了以下方法: func mutateArray(x: [String]) -> [String] { var newArray = [String]() for i in x {
var stringArray1 = ["abcdef", "bcdefg", "cdefgh"]
我想改变数组,去掉每个字符串的前3个字符。结果是:
var newStringArray1 = ["def", "efg", "fgh"]
从苹果的文档中,我尝试了以下方法:
func mutateArray(x: [String]) -> [String] {
var newArray = [String]()
for i in x {
let range = i.startIndex.advancedBy(3)
i.removeRange(range)
newArray.append(i)
}
return newArray
}
但这句话:
i.removeRange(range)
给了我一个错误:“不能对可变值使用mutating成员:”i“是一个“let”常量
我怎样才能像这样更改数组?我听说map()函数也可以使用,但在搜索map函数时,我收到的大多数解释都来自swift 1/1.2,在swift 2中有所改变
谢谢您不能修改for in
循环中的“counter”(在本例中不是真正的计数器)变量。使用普通循环并创建新对象
//standard for
for (var j = 0; j < x.length; j++) {
var i: String = x[i] //copy contents of object
let range = i.startIndex.advancedBy(3)
i.removeRange(range)
newArray.append(i)
}
//标准
对于(var j=0;j
您不能修改for in
循环中的“counter”(在本例中不是真正的计数器)变量。使用普通循环并创建新对象
//standard for
for (var j = 0; j < x.length; j++) {
var i: String = x[i] //copy contents of object
let range = i.startIndex.advancedBy(3)
i.removeRange(range)
newArray.append(i)
}
//标准
对于(var j=0;j
两种解决方案:
- 使用
substringFromIndex
func mutateArray(x: [String]) -> [String] { var newArray = [String]() for i in x { newArray.append(i.substringFromIndex(i.startIndex.advancedBy(3))) } return newArray } let stringArray1 = ["abcdef", "bcdefg", "cdefgh"] let trimmedStringArray = mutateArray(stringArray1)
- 使用
map
let trimmedStringArray = stringArray1.map {$0.substringFromIndex($0.startIndex.advancedBy(3))}
- 使用
substringFromIndex
func mutateArray(x: [String]) -> [String] { var newArray = [String]() for i in x { newArray.append(i.substringFromIndex(i.startIndex.advancedBy(3))) } return newArray } let stringArray1 = ["abcdef", "bcdefg", "cdefgh"] let trimmedStringArray = mutateArray(stringArray1)
- 使用
map
let trimmedStringArray = stringArray1.map {$0.substringFromIndex($0.startIndex.advancedBy(3))}
在这两种情况下,如果不能保证始终至少有3个字符,则应检查输入字符串的长度。您可以通过以下方式使用功能强大的
map
函数:
func mutatedArray(array: [String]) -> [String] {
return array.map {
$0.substringFromIndex($0.startIndex.advancedBy(3))
}
}
测试:
var list0 = ["abcdef", "bcdefg", "cdefgh"]
mutatedArray(list0) // ["def", "efg", "fgh"]
var list1 = ["def", "efg", "fgh"]
mutatedArray(list1) // ["", "", ""]
延伸
您还可以将该函数编写为字符串的数组
的扩展
extension SequenceType where Generator.Element == String {
func mutatedArray(removeChars: Int) -> [String] {
return self.map {
$0.substringFromIndex($0.startIndex.advancedBy(removeChars))
}
}
}
测试:
注
请注意,我将函数的名称更改为mutatedArray
,因为它返回一个新数组,并且没有更改原始数组。您可以通过以下方式使用功能强大的map
函数:
func mutatedArray(array: [String]) -> [String] {
return array.map {
$0.substringFromIndex($0.startIndex.advancedBy(3))
}
}
测试:
var list0 = ["abcdef", "bcdefg", "cdefgh"]
mutatedArray(list0) // ["def", "efg", "fgh"]
var list1 = ["def", "efg", "fgh"]
mutatedArray(list1) // ["", "", ""]
延伸
您还可以将该函数编写为字符串的数组
的扩展
extension SequenceType where Generator.Element == String {
func mutatedArray(removeChars: Int) -> [String] {
return self.map {
$0.substringFromIndex($0.startIndex.advancedBy(removeChars))
}
}
}
测试:
注
请注意,我将函数名更改为mutatedArray
,因为它返回一个新数组,并且没有更改原始数组。如果将I设置为var,程序将崩溃。。。我是数组中的索引,而不是里面的字符串!哦,我不代表索引的内容,而是索引本身。这就解释了为什么我会犯这个错误。谢谢。如果您将i设置为var,程序将崩溃。。。我是数组中的索引,而不是里面的字符串!哦,我不代表索引的内容,而是索引本身。这就解释了为什么我会犯这个错误。谢谢。这里有很多很酷的东西,我不知道你能用斯威夫特做!谢谢。“extension SequenceType where Generator.Element==String”与“extension String:{//code here}”语法有什么不同吗?不同之处在于,如果您编写扩展字符串{…}
,您将向字符串添加一些内容。另一方面,对于扩展SequenceType,其中Generator.Element==String{…}
当序列的元素是字符串时(例如字符串的数组
,因为数组
与SequenceType
一致),您正在向SequenceType
协议添加功能。这是像Swift这样的面向协议的语言之美的一部分:-)这里有很多很酷的东西,我不知道你可以用Swift做!谢谢。“extension SequenceType where Generator.Element==String”与“extension String:{//code here}”语法有什么不同吗?不同之处在于,如果您编写扩展字符串{…}
,您将向字符串添加一些内容。另一方面,对于扩展SequenceType,其中Generator.Element==String{…}
当序列的元素是字符串时(例如字符串的数组
,因为数组
与SequenceType
一致),您正在向SequenceType
协议添加功能。这是像Swift:-)这样的面向协议的
语言之美的一部分