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

时间:2011-05-03 03:11:09

标签: c# string

我在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;
}

提前致谢。如果有任何疑问,请询问。

3 个答案:

答案 0 :(得分:13)

使用String.Join使用逗号分隔符连接数组。

string[] s = "Hello world how are you".Split(' ');
string container = String.Join(",", s);

另外,如果您想在此网站上获得帮助,我建议您开始接受一些答案。

答案 1 :(得分:5)

您的问题不是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也是您正在执行的连接类型的强大工具。

答案 2 :(得分:0)

string.split 以字符串开头,以字符串数组结尾, 非常快。它使用不安全的代码来确定分隔符的索引。然后它分配正确大小的数组,然后通过分配一堆其他字符串来切断原始字符串。

string.join 以字符串数组开头,以字符串结尾,并且速度非常快,并使用不安全的代码。它创建一个缓冲区,并将字符串中的每个项目添加到缓冲区中。

但是,既然你想要以字符串开头以字符串结束,那么最好的办法就是使用一种使用不安全代码来改变''with'的方法“。

        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非常快且非常安全,请使用{{1}}