在我看来,没有适用于实现可迭代概念的简约子集的集合的c ++样式查找算法。我只能找到设计用于数组等的函数。这是一个疏忽(可能是我的!)还是有根本原因不将它包含在标准库中?我试了一下,想出了类似的东西:
function findfirst(iter, value)
findnext(iter, start(iter), value)
end
function findnext(iter, s, value)
s0 = s
while !done(iter, s0)
item, s1 = next(iter, s0)
if item == value
return s0, true
else
s0 = s1
end
end
return s0, false
end
它似乎在Arrays,LinkedLists等上运行良好:
l = list(3,2,1,3)
s, found = findfirst(l,3)
while found
item, s = next(l, s)
@show item, s
s, found = findnext(l, s, 3)
end
l = [3,2,1,3]
s, found = findfirst(l,3)
while found
item, s = next(l, s)
@show item, s
s, found = findnext(l, s, 3)
end
生成以下输出:
(item,s) = (3,list(2, 1, 3))
(item,s) = (3,nil(Int64))
(item,s) = (3,2)
(item,s) = (3,5)
答案 0 :(得分:2)
由于没有人回答帖子中隐藏的问题,以下是一个建议,使用标准包(良好做法)。当然,可以为filter
表示法定义快捷方式宏/函数:
using DataStructures,Iterators
l = list(3,2,1,3)
s = filter(x->x==3,chain(l))
for item in s
@show item
end
l = [3,2,1,3]
s = filter(x->x==3,chain(l))
for item in s
@show item
end
输出:
item = 3
item = 3
item = 3
item = 3