我需要连接这些值,我已经看过使用字符串生成器的示例,但是我不太清楚。
我试图返回重新创建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(",");
}
答案 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)
考虑您的代码C
为List<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();