如何有效地使用逗号分隔符

本文关键字:分隔符 有效地 | 更新日期: 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