11.7.3 OrderedSet
append (object: T) : OrderedSet(T)
包含self的所有元素、后面跟object的集合。
post: result->size() = self->size() + 1
post: result->at(result->size() ) = object
post: Sequence{1..self->size() }->forAll(index : Integer | result->at(index) = self ->at(index))
prepend(object : T) : OrderedSet(T)
以object开头,后面跟self的所有元素的集合。
post: result->size = self->size() + 1
post: result->at(1) = object
post: Sequence{1..self->size()}->forAll(index : Integer | self->at(index) = result->at(index + 1))
insertAt(index : Integer, object : T) : OrderedSet(T)
包含self的所有元素,并将object在指定的index位置插入后的集合。
post: result->size = self->size() + 1
post: result->at(index) = object
post: Sequence{1..(index - 1)}->forAll(i : Integer | self->at(i) = result->at(i))
post: Sequence{(index + 1)..self->size()}->forAll(i : Integer | self->at(i) = result->at(i + 1))
subOrderedSet(lower : Integer, upper : Integer) : OrderedSet(T)
从self的lower起始,到upper结束的所有元素集合。
pre : 1 <= lower
pre : lower <= upper
pre : upper <= self->size()
post: result->size() = upper -lower + 1
post: Sequence{lower..upper}->forAll( index | result->at(index - lower + 1) = self->at(index))
at(i : Integer) : T
self的第i个元素。
pre : i >= 1 and i <= self->size()
indexOf(obj : T) : Integer
obj在self中索引。
pre : self->includes(obj)
post : self->at(i) = obj
first() : T
self的第一个元素。
post: result = self->at(1)
last() : T
self的最后一个元素。
post: result = self->at(self->size() )
reverse() : OrderedSet(T)
self逆序排列后的集合。
post: result->size() = self->size()
sum() : T
重定义Collection的操作以去掉要求+操作满足结合律和/或交换律的需求,因为计算顺序已经由集合的元素次序和迭代操作所定义。
selectByKind(type : Classifier) : OrderedSet(T)
返回self中所有类型是type或其子类型的元素集合。返回集合的元素类型T是给定的type。
selectByType(type : Classifier) : OrderedSet(T)
返回self中所有类型是type而非其子类的元素集合。返回集合的元素类型T是给定的type。
asSet() : Set(T)
重定义Collection的操作,从self获得一个包含self所有元素的Set,次序未定义。
asOrderedSet() : OrderedSet(T)
重定义Collection的操作。从self获得一个与自身相同的OrderedSet。
post: result = self
post: Sequence{1..self.size()}->forAll(i | result->at(i) = self->at(i))
asSequence() : Sequence(T)
重定义Collection的操作。从self获得一个包含所有元素且次序相同的Sequence。
post: Sequence{1..self.size()}->forAll(i | result->at(i) = self->at(i))
asBag() : Bag(T)
重定义Collection的操作。从self获得一个包含所有元素的Bag,次序未定。