【问题标题】:Convert List of String to a String separated by a delimiter将字符串列表转换为由分隔符分隔的字符串
【发布时间】:2010-10-19 14:36:41
【问题描述】:

将(字符串)列表转换为值由逗号分隔的字符串的最佳方法是什么 (,)

【问题讨论】:

  • 为什么不把它变成一个速度/性能问题呢? “最快的方法是什么……”
  • 不能解释为最快和/或高效?

标签: vb.net string


【解决方案1】:
String.Join(",", myListOfStrings.ToArray())

【讨论】:

  • 我唯一可以添加的是在ToArray() 转换之前的空/空检查:myListOfStrings.Where(Function(s) Not String.IsNullOrEmpty(s)).ToArray()
  • 一段很棒的代码,谢谢! Windows Workflow Foundation / UiPath 用户的另一个提示,您可以将此代码放入工作流中,作为@Cory 上述代码的替代方法,忽略空白列表,只需在 Invoke Workflow File 活动的“ContinueOnError”属性中输入“True”。
  • 没有必要真的转换它ToArray()。您可以按原样使用它。 String.Join(",", myListOfStrings)
【解决方案2】:

这取决于您所说的“最佳”是什么意思。占用内存最少的是首先计算最终字符串的大小,然后创建具有该容量的 StringBuilder 并将字符串添加到其中。

StringBuilder 将创建一个大小正确的字符串缓冲区,该缓冲区是您从 ToString 方法中获得的字符串。这意味着没有创建额外的中间字符串或数组。

// specify the separator
string separator = ", ";

// calculate the final length
int len = separator.Length * (list.Count - 1);
foreach (string s in list) len += s.Length;

// put the strings in a StringBuilder
StringBuilder builder = new StringBuilder(len);
builder.Append(list[0]);
for (int i = 1; i < list.Count; i++) {
   builder.Append(separator).Append(list[i]);
}

// get the internal buffer as a string
string result = builder.ToString();

【讨论】:

  • 无论您所说的“最好”是什么意思,这可能都不是最好的。
  • @mquander:这是内存占用最少的,我在第一段中明确指出。如果您需要降低内存负载,这显然是最好的方法。
  • 在内存密集度方面差别不大。 Join 方法中没有中间字符串。它只是引用数组。
  • Profiling 会给我们答案,但我怀疑是否存在足够大的差异来证明使用此代码而不是一行 String.Join。
【解决方案3】:

我的解决方案:

string = ["a","2"]\n
newstring = ""
endOfString = len(string)-1
for item in string:
    newstring = newstring + item
if item != string[endOfString]:
    newstring = newstring ","'

【讨论】:

  • 伪代码有时很好,但这里更喜欢实际的语言实现。
【解决方案4】:

一个简单的解决方案:

dim str as string = ""
for each item as string in lst
  str += ("," & item)
next
return str.substring(1)

它从字符串(",")中取出第一个字符

【讨论】:

    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2023-03-07
    • 2011-12-15
    相关资源
    最近更新 更多