Type Collection = class public Function Create(); Function AddCollection(obj, name); Function RemoveCollection(index); Function SetIgnoreCase(value); Function GetCount(); Function CalNewName(prefix); Function Operator[](index); private name_collection_; index_collection_; name_index_; ignorecase_; // 是否启用大小写无关 End; // ============== 实现 ================= // Function Collection.Create(); Begin name_collection_ := array(); index_collection_ := array(); name_index_ := array(); ignorecase_ := false; End; Function Collection.AddCollection(obj, name); Begin name_collection_[ignorecase_ ? lowercase(name) : name] := obj; index := length(index_collection_) + 1; index_collection_[index] := obj; name_index_[index] := name; name_index_[name] := index; End; Function Collection.RemoveCollection(index); Begin arr1 := array(index : nil); arr2 := array(name_index_[index] : nil); reindex(index_collection_, arr1); reindex(name_collection_, arr2); reindex(name_index_, arr1); reindex(name_index_, arr2); if ifnumber(index) then for k, v in index_collection_ do if k > index then reindex(index_collection_, array(k : k - 1)); End; Function Collection.SetIgnoreCase(value); Begin ignorecase_ := value; End; Function Collection.GetCount(); Begin return length(name_collection_); End; Function Collection.CalNewName(prefix); Begin len := length(name_collection_) + 1; name := prefix $ len; while name in name_collection_ do name := prefix $ ++len; return name; End; Function Operator Collection.[](index); Begin if ifnumber(index) then return index_collection_[index]; return name_collection_[ignorecase_ ? lowercase(index) : index]; End;