Arrays Swift、句柄数组和数据类型(从字符串中拆分字符串)
几天前我刚开始使用Swift,我正在努力处理所有不同的数据类型 假设我们这样做:Arrays Swift、句柄数组和数据类型(从字符串中拆分字符串),arrays,swift,string,Arrays,Swift,String,几天前我刚开始使用Swift,我正在努力处理所有不同的数据类型 假设我们这样做: var myarray = ["justin", "steve", "peter"] var newString = myarray[2] 那为什么我现在不能只打印“彼得”的“p” --->给我一个错误: “'subscript'不可用:无法将字符串下标为Int” 在本主题中: [ 它说: “请注意,您永远不能使用从一个字符串到另一个字符串创建的索引(或范围)” 但我无法想象,没有办法处理它 因为当我这样做的时候
var myarray = ["justin", "steve", "peter"]
var newString = myarray[2]
那为什么我现在不能只打印“彼得”的“p”
--->给我一个错误:
“'subscript'不可用:无法将字符串下标为Int”
在本主题中:
[
它说:
“请注意,您永远不能使用从一个字符串到另一个字符串创建的索引(或范围)”
但我无法想象,没有办法处理它
因为当我这样做的时候:
var myarray = ["justin", "steve", "p.e.t.e.r"]
var newString = myarray[2]
let a : [String] = newString.componentsSeparatedByString(".")
print(a[2])
- 然后它就工作了。它打印(在本例中是)“t”
字符串
实例的实例方法将生成一个字符串
实例数组,即[String]
。数组的元素可以用经典的Java/C++方式进行索引(让thirdElement=array[2]
)
如果要拆分字符串
实例(“peter”
)在单个字符String
实例的数组中,可以使用String
实例的CharacterView
属性,然后将CharacterView
中的每个字符
映射回单个字符String
实例
let str = "peter"
let strArray = str.characters.map(String.init(_:)) // ["p", "e", "t", "e", "r"]
let thirdElement = strArray[2] // t
这是一种非常迂回的方式(String->CharacterView->[String]->String
),您最好只看@Hamish挖掘的复制线程中的优秀答案(包括直接String
索引):
字符串中的字符,并且喜欢使用数组可用的O(1)随机访问(如果您使用的是不可变的字符串
:s,则更适用,这样对应的字符串
数组只需要为每个不可变的字符串
实例生成一次)。应用于字符串
实例的实例方法会生成一个字符串
实例数组,即[String]
。数组的元素可以用经典的Java/C++方式编制索引(让thirdElement=array[2]
)
如果要拆分字符串
实例(“peter”
)在单个字符String
实例的数组中,可以使用String
实例的CharacterView
属性,然后将CharacterView
中的每个字符
映射回单个字符String
实例
let str = "peter"
let strArray = str.characters.map(String.init(_:)) // ["p", "e", "t", "e", "r"]
let thirdElement = strArray[2] // t
这是一种非常迂回的方式(String->CharacterView->[String]->String
),您最好只看@Hamish挖掘的复制线程中的优秀答案(包括直接String
索引):
正如下面Hamish所指出的,上述情况可能适用的一种情况是,如果您经常需要访问特定索引处的字符串中的字符,并且喜欢使用数组可用的O(1)随机访问(如果您使用的是不可变的字符串
:s,则更适用于此,这样对应的字符串
数组只需要为每个不可变的字符串
实例生成一次).如果您需要经常访问给定索引中的字符,而不必对每次访问进行线性遍历,那么这是一种很好的方法:)谢谢:)它给了我两个错误(“表达式列表中的预期表达式”、“分隔符”“预期表达式”),但这可能是我的Swift版本(2.1.1)的问题。我也会检查链接的线程。谢谢,帮我不要生气!:D@Hamish这是真的!我真的不知道我对.map(String.init(:)
变体的真实想法,与.map{String($0)}相比
,但嘿,为什么不呢:D@scopaest用let strArray=str.characters.map{String($0)}
替换上面代码段中的第二行,它可能适用于Swift 2.1(已测试并适用于Swift 2.2)@dfri是的,我通常会回到使用闭包表达式的时候,你必须用消除init
与之间的歧义(:)
,但我想这是一个偏好问题:)如果您需要经常访问给定索引处的字符,而不必对每次访问进行线性遍历,这是一个好方法:)谢谢:)它给了我2个错误(“表达式列表中的预期表达式”、“分隔符”“预期表达式”)但这可能是我的Swift版本(2.1.1)的一个问题。我还将检查链接的线程。谢谢,帮助我不愤怒!:D@Hamish这是真的!我真的不知道我对.map(String.init(:)
变体的真实想法,与.map{String($0)}相比
,但嘿,为什么不呢:D@scopaest用let strArray=str.characters.map{String($0)}
替换上面代码段中的第二行,它可能适用于Swift 2.1(已测试并适用于Swift 2.2)@dfri是的,我通常回到使用闭包表达式的时候,你必须用(:)
)消除init
的歧义,但我想这是一个偏好的问题:)