如何在Swift中将Int数组转换为String数组?

51
我有一个看起来像这样的数组:
var arr: [Int] = [1,2,3,4,5]
为了打印这个,我想将它转换为:
var newArr: [String?] = ["1","2","3","4","5"]

我该如何解决这个问题?


9
arr.map { String($0) }. If you really want the strings to be optional, arr.map { Optional(String($0)) } - Airspeed Velocity
我应该像这样写吗:var newArr = arr.map {Optional(String($0)) }?@AirspeedVelocity - GJZ
是的。但是,重新阅读后,不太清楚你想要什么……当你说“为了打印这个”,你指的是什么? - Airspeed Velocity
6个回答

89

Airspeed Velocity 给出了答案:

var arr: [Int] = [1,2,3,4,5]

var stringArray = arr.map { String($0) }

或者,如果您想使 stringArray 的类型为 [String?]

var stringArray = arr.map  { Optional(String($0)) }

这种形式的map语句是Array类型的一个方法。它在数组中的每个元素上执行您提供的闭包,并将所有这些调用的结果组合成一个新的数组。它将一个数组映射为一个结果数组。 传入的闭包应该返回与输出数组中对象类型相同的对象。

我们也可以使用更长的形式来书写:

var stringArray = arr.map {
  (number: Int) -> String in
  return String(number)
}

编辑:

如果您只需要将整数值安装到自定义表视图单元格中,则可能应该将数组保留为整数,并在cellForRowAtIndexPath方法中将这些值安装到单元格中。

func tableView(tableView: UITableView, 
  cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCellWithIdentifier("cell", 
    forIndexPath: indexPath) as! MyCustomCellType
  cell.textLabel?.text = "\(arr[indexPath.row])"
  return cell
}

编辑 #2:

如果您只想打印该数组,最好将其保留为整数对象的数组,并直接打印它们:

arr.forEach { print($0) }

10

更新:Swift 5

您可以使用以下代码来完成此操作:

var arr: [Int] = [1,2,3,4,5]
let stringArray = arr.map(String.init)

输出:

["1", "2", "3", "4", "5"]

2

您应该使用

 cell.textLabel?.text = "\(arr[indexPath.row])"

为了将标签中的值表示为字符串。

问题不在于这里,是吗? - Javier Vieira

2
使用以下代码可以原地完成操作:
Array(0...100).map { String($0) }

1

如果您想做类似Python的.join(),Perl的join(),PHP的implode()的操作,您可以使用.joined(separator: String)--但仅限于字符串值列表。

所以,您仍需要像上面所示的.map来进行转换,但一旦完成后,它看起来更像您熟悉的样子:

    let stringifiedNumberList = numberList
        .map { String($0) }
        .joined(separator: ", ")

如果你想要变得高级一点...

一个酷炫的事情是在输出的最后一个元素之前加入 "and" 或 "or",以提供牛津逗号分隔的列表,通过利用已经存在的 .map。使用 .enumerated() 方法可以帮助你获得 map 迭代过程中每个元素的索引:

    let stringifiedNumberList = numberList
        .enumerated()
        .map {
            if $0.0 == (numberList.count - 1) {
                return "and " + String($0.1)
            } else {
                return String($0.1)
            }
        }
        .joined(separator: ", ")

1
将以下文本翻译成中文:

像这样声明整数数组:

let integerArray = [1 , 2 ,4 ,5]

像这样打印您的类型转换数组:

print(integerArray.map { String($0) })

您可以尝试将任何数据类型(如Float,Double,Int8等)进行类型转换,这里map将从数组中获取每个元素并更改为指定的数据类型,然后将其分配回您的数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接