我有一个System.String一系列用空格或逗号,这样的分离实数组成:
“645.974,255.478 645.973,255.468 645.97 0 233.54 21”
我想分析我的字符串,并填写一个表与它的数字。 我试图找到执行此任务的最快方法。 到目前为止,我曾尝试以下方法,具有双重的列表,并解析字符串十万次。
List<double> MyList = new List<double>(250);
正则表达式 :〜8.56 [s]的
MyList.Clear(); foreach (Match match in RgxDouble.Matches(Points)) MyList.Add(double.Parse(match.Value));
非托管代码与C / CLI:〜7.5 [s]的
static void UsingUnmanagedCode(wchar_t* points, List<double> ^MyList) { static char buffer[MAX_CHARS]; wcstombs(buffer, points, MAX_CHARS); char *start = buffer, *ptr = buffer; for(; *ptr; ++ptr) { if(*ptr == ',') *ptr = ' '; } while(*(--ptr) == ' ') *ptr = '\0'; char *pEnd; MyList->Add(strtod(start, &pEnd)); while(*pEnd) { char *pStart = pEnd; MyList->Add(strtod(pStart, &pEnd)); } }
不安全代码与C#和StringBuilder的 :〜2.4 [s]的
MyList.Clear(); fixed (char* fixPointsPtr = Points) { char* ptr = fixPointsPtr; while (*ptr != '\0') { if ((*ptr < '0' || *ptr > '9') && *ptr != '-' && *ptr != '.') { MyList.Add(double.Parse(strBuild.ToString(0, strBuild.Length), NumberStyles.AllowDecimalPoint)); strBuild.Length = 0; } else strBuild.Append(*ptr); ++ptr; } }
串分割 :〜2 [s]的
MyList.Clear(); foreach (string point in Points.Split(Separators, StringSplitOptions.RemoveEmptyEntries)) MyList.Add(double.Parse(point, NumberStyles.AllowDecimalPoint));
有一个更好的选择吗?