map函数问题

我想对一个字符串的每个位置进行循环,如何符合返回true,不符合返回false

function convert(y,string)
    if length(string) > y+1
        s=string[y+1:y+2]
        if s=="CG"
            return true
        else
            return false
        end
    end
end
start_cpgs=[0,3,6,12,22]
sequence="CGTTGGTGTAGGTGTAGAGAGGTGTTTTGTGTTGGTGTAGGTGTAG"
map(convert,start_cpgs,sequence)

可是我的结果都是nothing,如下图所示,怎么返回true 或false呢?
是map比for要快么?
image

谢谢各位大佬帮忙

map 和向量化对字符串的作用规则不一样。前者把字符串拆成列表,后者当成标量。

使用对比

f(i,j) = (i,j)
map(f, [1, 2, 3], "abc") # (1, a) (2, b) (3, c)
f.([1, 2, 3], "abc") # (1, abc), (2, abc), (3, abc)

按这里意思应该用向量化而不是 map。

convert 这个写法也有点奇怪

  • 判断为否时,将返回nothing,返回类型不稳定
  • 这个 if else 不如直接写 return s == 'CG'

对于return true或者false,我在这的意思是想直接变成2进制的节省一下空间

要不试试点语法
image

当里面只有一个Vector,或者多个长度相同的Vector时,点语法可以直接用。

还有人家的建议是,代码改成:

julia> function convert(y,string)
           if length(string) > y+1
               s=string[y+1:y+2]
               return s=="CG" # 这里的值正巧就是true/false
           end
       end

julia> .+([1,2,3,4], 5)
4-element Vector{Int64}:
 6
 7
 8
 9

julia> .+([1,2,3,4], [3,4,5,6])
4-element Vector{Int64}:
  4
  6
  8
 10

点语法就类似这种,只不过,自己写的函数,需要再函数名后面加点.;加减乘除是在前面加点。
只要矢量长度别长短不一,对任何函数都适用哦

如果仅仅是为了找到有没有,或者有多少之类的,可以试试正则匹配,应该会更高效