What is a fast way to convert a string of two characters to an array of booleans?

前端 未结 8 1558
我寻月下人不归
我寻月下人不归 2021-02-04 10:24

I have a long string (sometimes over 1000 characters) that I want to convert to an array of boolean values. And it needs to do this many times, very quickly.

let         


        
8条回答
  •  花落未央
    2021-02-04 10:51

    This is faster:

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

    Update: under input = "010101011010101001000100000011010101010101010101"

    0.0741 / 0.0087, where this approach is faster that author's in 8.46 times. With bigger data correlation more positive.

    Also, with using nulTerminatedUTF8 speed a little increased, but not always speed higher than algorithm A:

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

    In result graph appears, with input length 2196, where first and last 0..1, A – second, B – third point. A: 0.311sec, B: 0.304sec

提交回复
热议问题