/// <summary> /// 获取匹配的数据集合 /// </summary> /// <typeparam name="listType">目标数据类型</typeparam> /// <param name="getValue">数据转换器</param> /// <returns>匹配的数据集合</returns> protected unsafe subArray <listType> getList <listType>(Func <valueType, listType> getValue) { subArray <listType> values = new subArray <listType>(array.Length); fixed(range *indexFixed = indexs) { for (range *index = indexFixed + indexs.Length; index != indexFixed;) { for (range range = *--index; range.StartIndex != range.EndIndex; ++range.StartIndex) { values.UnsafeAdd(getValue(array[range.StartIndex])); } } } return(values); }
/// <summary> /// 数据转换成单向动态数组 /// </summary> /// <returns>单向动态数组</returns> public unsafe subArray <valueType> GetList() { subArray <valueType> values = new subArray <valueType>(array.Length); fixed(range *indexFixed = indexs) { for (range *index = indexFixed + indexs.Length; index != indexFixed;) { for (range range = *--index; range.StartIndex != range.EndIndex; ++range.StartIndex) { values.UnsafeAdd(array[range.StartIndex]); } } } return(values); }
/// <summary> /// 获取匹配的数据集合 /// </summary> /// <param name="isValue">数据匹配器</param> /// <returns>匹配的数据集合</returns> protected unsafe subArray <valueType> getList(Func <valueType, bool> isValue) { subArray <valueType> values = new subArray <valueType>(array.Length); fixed(range *indexFixed = indexs) { for (range *index = indexFixed + indexs.Length; index != indexFixed;) { for (range range = *--index; range.StartIndex != range.EndIndex; ++range.StartIndex) { valueType value = array[range.StartIndex]; if (isValue(value)) { values.UnsafeAdd(value); } } } } return(values); }
/// <summary> /// 获取对象数组 /// </summary> /// <returns></returns> public subArray <valueType> GetArray() { int count = poolIndex; if (count != 0) { subArray <valueType> values = new subArray <valueType>(count); foreach (valueType value in pool) { if (value != null) { values.UnsafeAdd(value); } if (--count == 0) { break; } } return(values); } return(default(subArray <valueType>)); }