Я уверен, что не придумал самый эффективный алгоритм, но, по крайней мере, это отправная точка. Если ничего другого, вы заметите использование StringBuilder
вместо объединения строк. Одно это, вероятно, принесет вам некоторое преимущество в производительности.
Этот алгоритм предполагает, что ключи SortedList и список «data» упорядочены одинаково (от низкого до высокого).
var textBuilder = new StringBuilder(timestamp.ToString("HH:mm:ss"));
var index = 0;
foreach(double key in data.Keys)
{
while(Allkeys[index] < key)
{
textBuilder.Append(",0.0");
index++;
}
textBuilder.Append(",").Append(data[key]);
index++;
}
MyText = textBuilder.Append(@"\n").ToString();
Просто глядя на вышесказанное, я уверен, что есть ошибка, но не уверен, что или где, не тратя больше времени и / или тестирования.
Возможное решение LINQ является более декларативным:
var textBuilder = new StringBuilder(timestamp.ToString("HH:mm:ss"));
var values = Allkeys.Select(
key => data.ContainsKey(key) ? data[key].ToString() : "0.0")
.ToArray();
var data = String.Join(",", values);
var MyText = textBuilder.Append(data).Append(@"\n").ToString();
Еще можно включить в выражение LINQ, используя метод расширения Aggregate, но вам придется использовать конкатенацию строк в аккумуляторе, поэтому я не показал этого здесь.