11.9.4 Sequence
source类型是Sequence(T)的标准迭代器表达式是:
select(expression: OclExpression): Sequence(T)
body为真的source序列的子序列。
source->select(iterator | body) =
source->iterate(iterator; result : Sequence(T) = Sequence{} |
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所产生的结果元素的序列。
source->collectNested(iterator | body) =
source->iterate(iterator; result : Sequence(body.type) = Sequence{} | result->append(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最多只能有一个迭代器变量。