我在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;
}
提前致谢。如果有任何疑问,请询问。
答案 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}}