如何有效地使用逗号分隔符
本文关键字:分隔符 有效地 | 更新日期: 2023-09-27 17:54:34
我学习c#。我有一个数组。为了分隔数组项,我需要使用逗号。我做了,但我认为效率不高。如果没有if条件,怎么做呢?请不要使用替换方法。语法如下:
string container = "";
string[] s = "Hellow world how are you".Split(' ');
foreach (string item in s)
{
if (container == "")
{
container += item;
}
else
{
container += "," + item;
}
}
我必须继续循环。我只是想下面的类型解决方案。
string container = "";
string[] s = "Hellow world how are you".Split(' ');
foreach (string item in s)
{
container += "," + item;
}
提前感谢。
使用String.Join
以逗号分隔符连接数组。
string[] s = "Hello world how are you".Split(' ');
string container = String.Join(",", s);
另外,如果你喜欢在这个网站上获得帮助,我建议你开始接受一些答案。
您的问题不是if
语句。您的问题是,在循环中执行字符串连接和其他操作通常是糟糕的形式和不良实践。string
类是不可变的,变化是创建新的字符串,分配新的内存等。因此,这种做法是缓慢和低效的,比您的if
语句要慢得多。循环的迭代次数越多,您就越会注意到效率低下。
您应该熟悉StringBuilder
类,它允许您对string
执行有效的操作,而无需重复分配新对象。它在像上面这样的循环中特别有用。
使用StringBuilder
的示例如下
StringBuilder builder = new StringBuilder();
foreach (string item in array)
{
if (builder.Length != 0) builder.Append(",");
builder.Append(item);
}
string finalOutput = builder.ToString();
话虽如此,对于您正在执行的连接类型,string.Join
也是一个强大的工具。
string.split
以字符串开头,以字符串数组和结尾非常快。它使用不安全代码来确定分隔符的索引。然后它分配正确大小的数组,然后通过分配一堆其他字符串来分割原始字符串。
string.join
以字符串数组开始,以字符串结束,并且也非常快,使用不安全的代码。它创建一个缓冲区,并将字符串中的每一项添加到缓冲区中,并随着字符串的增长而增长。
但是由于您希望以字符串开始,并且以字符串结束,您最好的选择是使用使用不安全代码的方法将' '更改为','。
string s1 = "Hellow world how are you";
fixed (char* p = s1)
{
for (int i = 0; i < s1.Length; i++)
{
if (p[i] == ' ')
{
p[i] = ',';
}
}
}
这真是个坏主意
- 只有当源和目标长度相同时才有效
- 需要不安全代码
- 由于我直接改变字符串,所有对字符串的引用都得到更新
- 我可能漏掉了一堆检查
- 它只比
string.replace
快一点点
如果你真的需要它非常快,而且非常安全,就用String.Replace
吧