将两个字符的字符串转换为布尔数组的快速方法是什么?

2024-06-19

我有一个很长的字符串(有时超过 1000 个字符),我想将其转换为布尔值数组。它需要非常快速地多次执行此操作。

let input: String = "001"
let output: [Bool] = [false, false, true]

我天真的尝试是这样的:

input.characters.map { $0 == "1" }

但这比我想要的要慢得多。我的分析表明map这就是速度放缓的地方,但我不确定我能把它变得简单多少。

我觉得如果没有 Swift/ObjC 的开销,这会很快。在C中,我认为这是一个简单的for循环,其中将内存字节与常量进行比较,但我不确定我应该查看的函数或语法是什么。

有没有办法更快地做到这一点?

UPDATE:

我也尝试过一个

output = []
for char in input.characters {
    output.append(char == "1")
}

而且速度快了大约 15%。我的希望远不止于此。


这更快:

// Algorithm 'A'
let input = "0101010110010101010"
var output = Array<Bool>(count: input.characters.count, repeatedValue: false)
for (index, char) in input.characters.enumerate() where char == "1" {
    output[index] = true
}

更新:下input = "010101011010101001000100000011010101010101010101"

0.0741 / 0.0087,这种方法比作者更快8.46倍。数据越大,相关性越正。

另外,通过使用nulTerminatedUTF8速度略有提高,但速度并不总是高于算法A:

// Algorithm 'B'
let input = "10101010101011111110101000010100101001010101"
var output = Array<Bool>(count: input.nulTerminatedUTF8.count, repeatedValue: false)
for (index, code) in input.nulTerminatedUTF8.enumerate() where code == 49 {
    output[index] = true
}

在结果图中出现,带有输入长度2196,其中第一个和最后一个 0..1,A – 第二个点,B – 第三个点。A:0.311秒,B:0.304秒

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将两个字符的字符串转换为布尔数组的快速方法是什么? 的相关文章

  • 在不使用PrepareForSegue的情况下在segue之间传递数据

    我正在使用情节提要创建一个用户设置帐户 分 5 个步骤 每个步骤都有一个 ViewController 1 输入姓名 联系人等 2 导入照片 3 输入等 4 更多输入 5 确认页面 如果用户单击 确认 gt 获取所有输入并上传到解析 当我在
  • 在 IOS 上检查 Facebook Connect 会话

    在新的 Facebook 库中 FBSession 对象消失了 当用户启动应用程序时 如何在不提示 safari 或 uiwebview 的情况下立即检查用户的设备上是否有有效会话 facebook isSessionValid 方法适用于
  • Swift上传文件到PHP服务器

    因此 我将文件从 swift 上传到 PHP 服务器 POST 请求按预期到达 带有标头和所有内容 但我无法从中获取任何内容 FILES 它只是一个空数组 我显然在 Swift 方面做错了什么 这是我的代码 func testUpload
  • iOS 64 位 @try {... } @catch {...} 不起作用

    我有一个非常特殊的问题 最近 我向我的 iOS 项目 arm64 添加了 64 位支持 从那时起 我开始收到内部代码段未捕获的异常 try catch 我使用 Crashlytics 进行崩溃报告 我设法在应用程序中的任何位置使用以下代码行
  • UIView 的变换看起来很糟糕

    我有一个简单的视图和简单的背景 我需要旋转视图及其内容 代码在这里 CGAffineTransform r CGAffineTransformMakeRotation 5 M PI 180 0f backView transform r 我
  • NSAttributedString '\n' 被忽略

    我有一个视图 其唯一的 UI 元素是UITextView In viewDidLoad 我使用 Text n 创建一个属性字符串 并将文本视图的属性文本设置为 NSAttributedString string NSAttributedSt
  • Swift 闭包异步执行顺序

    在我的模型中 有函数来获取需要完成处理程序作为参数的数据 func fetchMostRecent completion sortedSections TableItem gt self addressBook loadContacts c
  • 在单独的类中录制和播放语音 (Swift3)

    我使用了许多用于录制和播放声音的代码 但其中大多数不在 swift3 中 并且它们在我的应用程序中不起作用 This https github com genedelisa AVFoundationRecorder代码有效 但我想从视图控制
  • 从服务器实时更新的 iOS 应用程序:Socket(使用流)还是 Apple 推送通知服务?

    我正在尝试制作一个 iOS 5 应用程序 该应用程序具有来自服务器的实时信息 它只会在应用程序运行时使用这些 为了使其实时且无需轮询 我一直在评估两种设计路线 创建从应用程序到服务器的套接字 并通过流交换信息 Pros 相对简单 不涉及第三
  • 计算 Swift 4 中的时差

    如果我有两个变量 10 30 和另一个 1 20 有没有办法获得它们之间的 2小时50分钟 的时间差 我在下面尝试过这个 func calcTime time1 String time2 String gt String let time1
  • 如何使用 Swift 关闭打开的文件?

    我正在下载约 1300 张图像 这些是小图像 总大小约为 500KB 但是 下载并将它们放入 userDefault 后 我 收到如下错误 libsystem network dylib nw route get ifindex 套接字 P
  • 在 iPad 上的弹出窗口中推送导航视图控制器时动画弹出窗口内容大小

    当包含的 UINavigationController 推送新控制器时 如何让 UIPopoverController 为其大小设置动画 我有一个UIPopover正在显示从UIBarButtonItem在我的 iPad 应用程序中 它包含
  • AFNetworking 的 UICollectionView 异步下载错误

    您好 我正在使用目录列表创建 Uicollection 视图 点击单元格时必须下载 PDF 它在一个视图中完美运行 但在另一个视图中出现错误 thread 1 tid 0x4b2ce 0x000000018d14f9b8 CoreFound
  • 带过滤器的 AudioKit 导出文件

    我想用音频套件的许多过滤器覆盖现有的 m4a 文件 我的代码 file try AKAudioFile forReading recordVoiceURL player AKPlayer audioFile file delay AKVar
  • 在 for-in 循环中使用尾随闭包

    我在用着map for in 循环中的数组函数如下 let numbers 2 4 6 8 10 for doubled in numbers map 0 2 compile error print doubled 这会产生编译错误 使用未
  • scrollViewDidScroll:在 UITableViewRowAnimation 上?

    当一个人使用一个UITableViewRowAnimation删除一行或添加一行时 有时如果该行位于表视图的最末端 则表会滚动 然而 即使它滚动它似乎并没有调用scrollViewDidScroll 关于代表 例如 我的委托中有以下代码 v
  • 如何在首选项包中使用 PSLinkListCell 中的值?

    我想为我的越狱调整制作一个偏好包 我成功地制作了一个带有可用开关的首选项捆绑包 但我想要一个选择颜色的设置 例子 Blue Color gt Yellow Green 所以如果我点击Color 它会将我带到另一个屏幕 要求我选择 Blue
  • 如何以编程方式设置 iOS 6/7 Delta

    当我离开 iOS6 时 我正在使用 Xcode 4 6 开发 UISplitView 应用程序 我有设计 现在我迁移到新的 Xcode5 现在我有这样的设计 UINavigationBar 完全重叠我的 UISearchBar Leo Na
  • 是否可以使 MGLPolyLines 可选择? - 斯威夫特,MapBox

    是否可以使 MGLPolyLine 可触摸 可选择 具有用户交互 在我的项目中 用户需要触摸折线 有这个问题 https stackoverflow com questions 43683846 how to make a mglpolyl
  • 通过 NSDate 过滤 Realm 中的查询会抛出 NSInvalidArgumentException

    我到处寻找 甚至访问了一些带有永远不会消失的病毒警告消息的可疑网站 但我无法弄清楚这一点 我只是想过滤Results

随机推荐