创建字符串生成器数组而不是字符串
本文关键字:字符串 数组 创建 | 更新日期: 2023-09-27 18:34:31
我正在使用 c# 在窗口应用程序中创建一个应用程序。我有一个字符串数组,它的值将在每个计时器滴答事件中更新。稍后,我必须将此数组转换为对象数组。我知道,如果我们多次修改字符串,objects.so 我想使用 stringBuilder 创建新字符串可能会很耗时。
假设,在计时器滴答事件中:
for (int i = 0; i < 10; i++)
{
n[i] = i.ToString();
}
其中 n 是字符串数组,我想使用字符串生成器而不是数组。可能吗?我该怎么做?如何将字符串生成器类型转换为对象类型?
这里不需要StringBuilder
。StringBuilder 仅在多次处理(通常:连接(单个字符串时才需要。您有许多小的且不相关的字符串。
您可能想要的是将数组string[]
替换为 List<string>
。
您可以保留字符串数组并在循环中使用StringBuilder
。
var myValues = new String[100];
void tick() {
var sb = new StringBuilder();
for (int i = 0; i < 10; i++){
sb.append(i.ToString());
}
myValues.add(sb.ToString());
}
这会将 0 到 10 范围内的所有值添加到一个字符串中。我不知道你为什么需要这个,所以如果你想做一些不同的事情,你应该澄清一下。
你可以做这样的事情
StringBuilder obj=new StringBuilder();
for (int i = 0; i < 10; i++)
{
obj.append(i.ToString());
}
这是另一种不需要使用数组或StringBuilder
的方法,如果序列不是太大,这种方法应该足够有效:
string nums = String.Join("", Enumerable.Range(0, 10));
但是,如果输入已经是数组,则string.Join
确实有效。在这种情况下,使用 StringBuilder
可能真的更有效:
string nums = Enumerable.Range(0, 10)
.Aggregate(new StringBuilder(), (a, b) => a.Append(b))
.ToString();
我建议您使用如下代码:
class Program
{
static void Main(string[] args)
{
var dic = new Dictionary<int, StringBuilder>();
//Initialize dictionary
for (int i = 0; i < 10; i++)
{
dic.Add(i, new StringBuilder());
}
TimerElapsed(dic);
TimerElapsed(dic);
Process(dic.Values.ToArray());
}
public static void Process(object[] objects)
{
//Do your processing
}
public static void TimerElapsed(IDictionary<int, StringBuilder> dic)
{
for (int i = 0; i < 10; i++)
{
dic[i].Append(i.ToString());
}
}
}
这样的代码将为您提供收集和灵活性的好处(例如:您可以轻松地转换为数组(