子集字符串数组基于长度

时间:2015-09-29 08:50:33

标签: string julia

我有一个带>的向量30000字。我想创建一个这个向量的子集,它只包含那些长度大于5的单词。实现这个目的的最佳方法是什么?

基本上df包含多个句子。

所以,

wordlist = df2;
wordlist = [strip(wordlist[i]) for i in [1:length(wordlist)]];

现在,我需要将wordlist子集化,使其仅包含长度大于5的单词。

2 个答案:

答案 0 :(得分:1)

 sub(A,find(x->length(x)>5,A)) # => creates a view (most efficient way to make a subset)

编辑:getindex()返回所需元素的副本

getindex(A,find(x->length(x)>5,A)) # => makes a copy 

答案 1 :(得分:1)

您可以使用filter

wordlist = filter(x->islenatleast(x,6),wordlist)

并将其与快速条件相结合,例如islenatleast定义为:

function islenatleast(s,l)
    if sizeof(s)<l return false end
    # assumes each char takes at least a byte
    l==0 && return true
    p=1
    i=0
    while i<l
        if p>sizeof(s) return false end
        p = nextind(s,p)
        i += 1
    end
    return true
end

根据我的时间islenatleast比计算整个长度(在某些情况下)更快。此外,通过定义与核心函数length的原始竞争力,这显示了Julia的优势。

但是这样做:

wordlist = filter(x->length(x)>5,wordlist)

也会这样做。