11.9.3 Bag
source类型是Bag(T)的标准迭代器表达式是:
select
body为真的source包的子包。
source->select(iterator | body) =
source->iterate(iterator; result : Bag(T) = Bag{} |
if body then result->including(iterator)
else result
endif)
select最多只有一个迭代器变量。
reject
source集合中body计算为假的元素组成的子包。
source->reject(iterator | body) = source->select(iterator | not body)
reject最多只能有一个迭代器变量。
collectNested
对source集合中的每个成员应用body所产生的结果元素的Bag。
source->collectNested(iterator | body) =
source->iterate(iterator; result : Bag(body.type) = Bag{} | result->including(body ) )
collectNested最多只能有一个迭代器变量。
sortedBy
产生一个包含source集合所有元素的序列。元素中对于body计算结果最小的排在第一位,依此类推。body表达式的类型必须定义了 < 操作。< 操作必须返回一个布尔且必须是可传递的(即,如果 a < b 且 b < c,那么有 a < c)。
source->sortedBy(iterator | body) = iterate( iterator ; result : Sequence(T) : Sequence {} |
if result->isEmpty() then
result.append(iterator)
else
let position : Integer = result->indexOf (
result->select (item | body (item) > body (iterator)) ->first() )
in
result.insertAt(position, iterator)
endif
sortedBy最多只能有一个迭代器变量。