如何连接列表

时间:2018-10-30 15:56:48

标签: c#

我需要连接这些值,我已经看过使用字符串生成器的示例,但是我不太清楚。

我试图返回重新创建https://api.tfl.gov.uk/Line/140/Route/Sequence/Inbound的线串

无论如何,我必须返回的结果都包含多于1个的字符串,因此添加了[[,“]]

//

for (int i = 0; i < R.geometry.coordinates.Count; i++)

    foreach (List<List<double>> C in R.geometry.coordinates)

    {

        RS.lineStrings.Add(i++.ToString());
        RS.lineStrings.Add("[");
        foreach (List<double> a in C)
        {   
       // These values are to be concatentated, I'm wanting to create a string of RS.lineStrings.Add($"[{a[1]},{a[0]}]");
            RS.lineStrings.Add($"[{a[1]},{a[0]}]");  
        }

        RS.lineStrings.Add("]");
        RS.lineStrings.Add(",");
}

5 个答案:

答案 0 :(得分:0)

您可以使用string.Join()来加入他们:

string result = string.Join(",", C);

答案 1 :(得分:0)

字符串是不可变的。因此,如果您进行大量的字符串连接,那么可能会在内存中留下很多无效的字符串。 GC将处理它们,但仍然是性能问题。特别是在Web服务器上,应避免使用它。然后还有类似StringInterning的东西。如果对字符串进行批量操作,则会有很多次要的优化。

StringBuilder是我们最接近可变字符串的地方,它围绕着这些优化(这里可能是一个障碍)。唯一的区别是您使用“添加”而不是“添加”。

答案 2 :(得分:0)

有多种可能性:

 RS.lineStrings.Add(string.concat("[{a[1]}" + "," + "{a[0]}]");
 RS.lineStrings.Add(string.concat("[{a[1]}",",","{a[0]}]");

文档https://docs.microsoft.com/en-us/dotnet/csharp/how-to/concatenate-multiple-strings

答案 3 :(得分:0)

考虑您的代码CList<List<double>>。然后,您可以使用LINQ进行连接

var sb = new StringBuilder(C.Count * 20); // appox length not to resize

C.ForEach(item => sb.AppendFormat("[{0},{1}]", item[1], item[0]));

var str = sb.ToString(); // This is concatenation.

如果要列出字符串

C.Select(item => $"[{item[1]},{item[0]}]").ToList();   

根据您的新更新(我正在尝试返回“ [[0,1],[2,3],[4,5]]

var result = "[" + string.Join(",", C.Select(item => $"[{item[1]},{item[0]}]")) + "]";

您选择哪种方法-应该取决于列表的详细信息。您仍然可以使用字符串生成器来进行此操作,以实现更好的内存管理

var sb = new StringBuilder(C.Count * 20); // appox length not to resize

C.ForEach(item => sb.AppendFormat("[{0},{1}],", item[1], item[0])); // note comma - ],
sb.Insert(0, "[").Replace(',', ']', sb.Length - 1, 1); // this removes last comma, ads closing bracket

答案 4 :(得分:0)

这是一个StringBuilder的解决方案。所有人都出去了,这是罗word的,但是它应该更快,并且为大量物品产生更少的垃圾。它不使用任何字符串连接。

 var listOfLists = new List<List<double>>
 {
     new List<double> {1.0, 2.0, 3.0},
     new List<double> {3.14, 42.0}
 };
 var buffer = new StringBuilder();
 buffer.Append('[');
 var firstOuter = true;
 foreach (var list in listOfLists)
 {
     var firstInner = true;
     buffer.Append('[');
     if (!firstOuter)
     {
         buffer.Append(',');
     }
     foreach (var item in list)
     {
         if (!firstInner)
         {
             buffer.Append(',');
         }

         firstInner = firstOuter = false;
         buffer.Append(item.ToString());
     }
     buffer.Append(']');
 }
 buffer.Append(']');

 var concatenated = buffer.ToString();