当前位置: 首页 > 知识库问答 >
问题:

使用reduce()时将字符串转换为Int

萧嘉禧
2023-03-14

我有代码:

let number: String = "111 15 111"
let result = number.components(separatedBy: " ").map {Int($0)!}.reduce(0, {$0 + $1})

首先,它接受给定的字符串并拆分为数组。接下来,每个数字都被转换成一个整数,最后,所有的数字都相互相加。它工作得很好,但代码有点长。所以我想到了在使用reduce的同时使用map函数并将String转换为Int,如下所示:

let result = number.components(separatedBy: " ").reduce(0, {Int($0)! + Int($1)!})

输出为:

error: cannot invoke 'reduce' with an argument list of type '(Int, (String, String) -> Int)'

因此,我的问题是:为什么我不能在使用reduce()时将字符串转换为整数?

共有1个答案

斜单鹗
2023-03-14

reduce第二个参数是一个闭包,$0是结果,$1是字符串。而不是强制展开,可选的默认值会更好。

let number: String = "111 15 111"
let result = number.components(separatedBy: " ").reduce(0, {$0 + (Int($1) ?? 0) })

另一种选择是使用flatmap和使用+运算符的reduce

let result = number.components(separatedBy: " ").flatMap(Int.init).reduce(0, +)
 类似资料:
  • 我只是无法在c中转换不同的数据类型,我知道c是一种强类型语言,所以我在这里使用了,但我面临一个问题,错误消息是 从“std::string{aka std::basic_string}类型转换为“int”类型的static_

  • 问题内容: 使用BufferedReader时如何将String转换为int?据我记得,它类似于以下内容: 但由于某种原因,它无法正常工作。 错误消息显示: 找不到适合的方法 它也说不适用 问题答案: 一个需要在构造函数中指定。该转弯字节流通向字符流。正如其他人提到的那样,您应该意识到可以从这段代码中引发的异常,例如IOException和NumberFormatException。

  • 问题内容: 该应用程序基本上通过输入初始速度和最终速度以及时间来计算加速度,然后使用公式来计算加速度。但是,由于文本框中的值是字符串,所以我无法将它们转换为整数。 问题答案: 基本概念, 请注意,这仅在Swift 1.x中有效 Swift 4更新

  • 问题内容: 问题:转弯 进入 Perl支持可以在替换字符串中使用的“ \ L”操作。 模式类不支持此操作: 此类不支持的Perl构造:[…]预处理操作\ l \ u,\ L和\ U。 https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html 问题答案: 您无法在Java正则表达式中执行此操作。您必须使用和手动进行

  • 注意:这个问题包含不建议使用的前1.0代码!不过,答案是正确的。 要在Rust中将转换为,我可以执行以下操作: 我知道如何将转换为的唯一方法是获取其中的一个片段,然后像这样使用: 有没有办法直接将转换为?

  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或