/// <summary> /// 分割字符串 /// </summary> /// <param name="value">原字符串</param> /// <param name="startIndex">起始位置</param> /// <param name="length">分割字符串长度</param> /// <param name="split">分割符</param> /// <returns>字符子串集合</returns> public unsafe static subArray <subString> split(this string value, int startIndex, int length, char split) { array.range range = new array.range(value.length(), startIndex, length); if (range.GetCount != length) { fastCSharp.log.Error.Throw(log.exceptionType.IndexOutOfRange); } subArray <subString> values = default(subArray <subString>); if (value != null) { fixed(char *valueFixed = value) { char *last = valueFixed + range.SkipCount, end = last + range.GetCount; for (char *start = last; start != end;) { if (*start == split) { values.Add(subString.Unsafe(value, (int)(last - valueFixed), (int)(start - last))); last = ++start; } else { ++start; } } values.Add(subString.Unsafe(value, (int)(last - valueFixed), (int)(end - last))); } } return(values); }
/// <summary> /// 连接数组 /// </summary> /// <typeparam name="arrayType">目标数组类型</typeparam> /// <param name="getValue">数据获取器</param> /// <returns>目标数组</returns> public subArray <arrayType> Concat <arrayType>(Func <valueType, subArray <arrayType> > getValue) { if (getValue == null) { log.Error.Throw(log.exceptionType.Null); } if (length != 0) { subArray <arrayType> values = new subArray <arrayType>(); if (startIndex == 0) { int index = length; foreach (valueType value in array) { values.Add(getValue(value)); if (--index == 0) { break; } } } else { int index = startIndex, endIndex = startIndex + length; do { values.Add(getValue(array[index])); }while (++index != endIndex); } return(values); } return(default(subArray <arrayType>)); }
/// <summary> /// 分割字符串并返回数值集合(不检查数字合法性) /// </summary> /// <param name="ints">原字符串</param> /// <param name="split">分割符</param> /// <returns>数值集合</returns> public unsafe static subArray <int> splitIntNoCheck(this string ints, char split) { subArray <int> values = new subArray <int>(); if (ints != null && ints.Length != 0) { fixed(char *intPoint = ints) { int intValue = 0; for (char *next = intPoint, end = intPoint + ints.Length; next != end; ++next) { if (*next == split) { values.Add(intValue); intValue = 0; } else { intValue *= 10; intValue += *next; intValue -= '0'; } } values.Add(intValue); } } return(values); }
/// <summary> /// 查找符合条件的记录集合 /// </summary> /// <typeparam name="valueType">值类型</typeparam> /// <param name="values">值集合</param> /// <param name="isValue">判断记录是否符合条件的委托</param> /// <returns>符合条件的记录集合</returns> public static subArray <valueType> getFind <valueType> (this IEnumerable <valueType> values, Func <valueType, bool> isValue) { if (values != null) { if (isValue == null) { log.Error.Throw(log.exceptionType.Null); } subArray <valueType> value = new subArray <valueType>(); foreach (valueType nextValue in values) { if (isValue(nextValue)) { value.Add(nextValue); } } return(value); } return(default(subArray <valueType>)); }