如何将Swift数组转换为字符串?

Tro*_*roy 333 arrays ios swift

我知道如何以编程方式执行此操作,但我确信有一种内置方式...

我使用的每种语言都有一些对象集合的默认文本表示,当你尝试将Array与字符串连接起来时,它会吐出来,或者将它传递给print()函数等等.Apple的Swift语言吗?有一种内置的方法可以轻松地将Array转换为String,或者在对数组进行字符串化时我们是否总是要显式?

Ant*_*nio 645

如果数组包含字符串,你可以使用Stringjoin方法:

var array = ["1", "2", "3"]

let stringRepresentation = "-".join(array) // "1-2-3"
Run Code Online (Sandbox Code Playgroud)

Swift 2中:

var array = ["1", "2", "3"]

let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
Run Code Online (Sandbox Code Playgroud)

如果要使用特定的分隔符(hypen,blank,逗号等),这可能很有用.

否则,您只需使用该description属性,该属性返回数组的字符串表示形式:

let stringRepresentation = [1, 2, 3].description // "[1, 2, 3]"
Run Code Online (Sandbox Code Playgroud)

提示:任何实现Printable协议的对象都有一个description属性.如果您在自己的类/结构中采用该协议,那么您也可以使它们打印友好

Swift 3中

  • join成为joined例子[nil, "1", "2"].flatMap({$0}).joined()
  • joinWithSeparator变为joined(separator:)(仅适用于字符串数组)

Swift 4中

var array = ["1", "2", "3"]
array.joined(separator:"-")
Run Code Online (Sandbox Code Playgroud)

  • `joinWithSeparator`仅适用于字符串数组.如果你有其他对象的数组,那么首先使用`map`.例如,`[1,2,3] .map({"\($ 0)"}).joinWithSeparator(",")` (84认同)
  • `" - ".join(array)`在Swift 2,Xcode 7 Beta 6中不再可用,尝试使用`array.joinWithSeparator(" - ")` (12认同)
  • @Dmitry不要使用字符串插值soley来转换为字符串.在String上使用初始化程序要好得多 (3认同)
  • @Andrej:它适用于1.2和2.0.你在使用一串字符串吗? (2认同)
  • 安东尼奥,对不起,我的错。我的阵列有问题。现在我可以确认您的解决方案有效。:) (2认同)

Ima*_*tit 119

使用Swift 3,根据您的需要,您可以选择以下代码块之一.


将数组Character转换为String没有分隔符的数组:

let characterArray: [Character] = ["J", "o", "h", "n"]
let string = String(characterArray)

print(string)
// prints "John"
Run Code Online (Sandbox Code Playgroud)

将数组String转换为String没有分隔符的数组:

let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: "")

print(string) // prints: "BobDanBryan"
Run Code Online (Sandbox Code Playgroud)

将数组String转换为String带有单词之间分隔符的数组:

let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: " ")

print(string) // prints: "Bob Dan Bryan"
Run Code Online (Sandbox Code Playgroud)

将数组String转换为String带有字符之间分隔符的数组:

let stringArray = ["car", "bike", "boat"]
let characterArray = stringArray.flatMap { $0 }
let stringArray2 = characterArray.map { String($0) }
let string = stringArray2.joined(separator: ", ")

print(string) // prints: "c, a, r, b, i, k, e, b, o, a, t"
Run Code Online (Sandbox Code Playgroud)

将数组Float转换为String数字之间的分隔符:

let floatArray = [12, 14.6, 35]
let stringArray = floatArray.map { String($0) }
let string = stringArray.joined(separator: "-")

print(string)
// prints "12.0-14.6-35.0"
Run Code Online (Sandbox Code Playgroud)


小智 49

Swift 2.0 Xcode 7.0 beta 6以后使用joinWithSeparator()而不是join():

var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
Run Code Online (Sandbox Code Playgroud)

joinWithSeparator 被定义为扩展 SequenceType

extension SequenceType where Generator.Element == String {
    /// Interpose the `separator` between elements of `self`, then concatenate
    /// the result.  For example:
    ///
    ///     ["foo", "bar", "baz"].joinWithSeparator("-|-") // "foo-|-bar-|-baz"
    @warn_unused_result
    public func joinWithSeparator(separator: String) -> String
}
Run Code Online (Sandbox Code Playgroud)


har*_*ios 23

斯威夫特3

["I Love","Swift"].joined(separator:" ") // previously joinWithSeparator(" ")
Run Code Online (Sandbox Code Playgroud)


Ank*_*arg 14

在Swift 4中

let array:[String] = ["Apple", "Pear ","Orange"]

array.joined(separator: " ")
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 8

如今,在 iOS 13+ 和 macOS 10.15+ 中,我们可能会使用ListFormatter

\n
let formatter = ListFormatter()\n\nlet names = ["Moe", "Larry", "Curly"]\nif let string = formatter.string(from: names) {\n    print(string)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这将产生一个很好的、自然语言的列表字符串表示形式。美国用户将看到:

\n
\n

莫伊、拉里和卷毛

\n
\n

它将支持 (a) 您的应用程序已本地化的任何语言;(b) user\xe2\x80\x99s 设备已配置。例如,使用支持德语本地化的应用程序的德国用户将看到:

\n
\n

莫伊、拉里和科利

\n
\n


eon*_*ist 7

由于没有人提到减少,这里是:

[0,1,1,0].map{"\($0)"}.reduce(""){$0+$1}//"0110"
Run Code Online (Sandbox Code Playgroud)

本着功能编程的精神

  • 很好的做事方式,谢谢...添加一个较短的命令行结束:`[0,1,1,0] .map {"\($ 0)"}.reduce("",+)`. (3认同)

Age*_*ith 7

更改可选/非可选字符串数组

//Array of optional Strings
let array : [String?] = ["1",nil,"2","3","4"]

//Separator String
let separator = ","

//flatMap skips the nil values and then joined combines the non nil elements with the separator
let joinedString = array.flatMap{ $0 }.joined(separator: separator)


//Use Compact map in case of **Swift 4**
    let joinedString = array.compactMap{ $0 }.joined(separator: separator

print(joinedString)
Run Code Online (Sandbox Code Playgroud)

这里flatMap,compactMap跳过数组中的nil值,并附加其他值以给出连接的字符串.

  • @YashBedi在Swift 4中我们使用**compactMap**而不是**flatMap** (3认同)
  • @Augusto Swift 自动为内联闭包提供速记参数名称,可用于通过名称 $0、$1、$2 来引用闭包参数的值。这里, $0 指的是闭包的第一个 String 参数。 (2认同)

Bil*_*han 6

您可以使用循环来完成此操作。或者使用地图。

通过映射:

let array = ["one" , "two" , "three"]
    
array.map({$0}).joined(seperator : ",")
Run Code Online (Sandbox Code Playgroud)

所以在分隔符中你可以修改字符串。

Output-> ("one,two,three")
Run Code Online (Sandbox Code Playgroud)


Dil*_*lan 5

当您也有结构数组时,您可以用来joined()获取单个字符串。

struct Person{
    let name:String
    let contact:String
}
Run Code Online (Sandbox Code Playgroud)

您可以使用map()&轻松生成字符串joined()

PersonList.map({"\($0.name) - \($0.contact)"}).joined(separator: " | ")
Run Code Online (Sandbox Code Playgroud)

输出:

Jhon - 123 | Mark - 456 | Ben - 789  
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您想将自定义对象数组转换为字符串或逗号分隔的字符串(csv),您可以使用

 var stringIds = (self.mylist.map{$0.id ?? 0}).map{String($0)}.joined(separator: ",")
Run Code Online (Sandbox Code Playgroud)

归功于:urvish modi post:将整数数组转换为逗号分隔的字符串