[英]Efficient way to extract double value from a List<string> in C#
我有一個包含圖形數據的字符串。
string sGraph = "0.05 /m 0.05 /m 0.05 /m 0.05 /m 0.05 /m 0.05 /m 0.05 /m 0.05....... 0.05 /m";
我必須在double []或List中提取double值以進行進一步處理。 對於前者 我用
List<String> sGraphPoints = Regex.Split(sGraph, " /m").ToList<string>();
檢索字符串列表中的double值。 然后,我可以使用字符串列表中的每個值進行進一步處理。 有沒有一種有效的方法,我可以做同樣的,而不是將每個字符串變量值轉換為double,如下所示...
double[] dGraphPoints = new double[sGraphPoints.Count];
int i = 0;
foreach (string str in sGraphPoints)
{
if (str != "")
{
dGraphPoints[i] = double.Parse(str);
}
else
{
dGraphPoints[i] = 0.0;
}
i++;
}
提前謝謝了
double[] dGraphPoints = sGraph.Split("/m")
.Select(s => s.Trim())
.Where(s => !string.IsNullOrEmpty(s))
.Select(s => Double.Parse(s))
.ToArray()
這只是稍微“有效”,因為它沒有使用正則表達式而且它之間沒有創建額外的列表。
但實際上,它取決於你使用的是什么價值? 您可以修改where子句以僅選擇您感興趣的值,但我不知道它們會是什么。
像這樣的東西;
public static IList<double> Parse(string text)
{
List<double> list = new List<double>();
if (text != null)
{
StringBuilder dbl = new StringBuilder(30);
for (int i = 0; i < text.Length; i++)
{
if (text[i] == 'm')
{
list.Add(double.Parse(dbl.ToString(), CultureInfo.InvariantCulture));
dbl.Length = 0;
}
else
{
if ((text[i] != ' ') && (text[i] != '/'))
{
dbl.Append(text[i]);
}
}
}
}
return list;
}
它不使用Regex,只分配所需的數組和固定大小的StringBuilder。 如果文本是作為TextReader而不是字符串提供的,則可以將返回的IList更改為IEnumerable,使用yield而不是Add,並優化內存消耗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.