在C#中是否有一种灵活的方式来切换用逗号分隔的字符串的两个部分?

我有一堆lat / long对作为字符串: -94.5555,95.5555 我正在使用的API需要切换它们: 95.555,-94.555 这样做有什么光滑,简短的方法吗?     
已邀请:
只需写一个方法来做到这一点,例如使用
string.IndexOf
// Probably rename to reflect your specific usage
private static string SwitchSplitOnComma(string text)
{
    // Optional: validate that text is non-null
    int comma = text.IndexOf(',');
    // Optional: validate that there's a comma :)
    return text.Substring(comma + 1) + "," + text.Substring(0, comma);
}
除非你出于各种目的需要这个,否则我会把它留在需要它的班级作为专业方法。如果您发现在其他地方需要相同的功能,则仅将其提升为“通用实用程序方法”(可能参数化分隔符等)。 虽然您可以在一个语句中执行此操作,但我认为如果您将代码放在一个单独的方法中,代码可能会更容易理解 - 此时可以使用一些易于理解的语句而不是一个复杂的语句效率低下:)     
Linq的单线:
string.Join(",", original.Split(',').Reverse());
或者,更明确(可能是性能改进):
string[] split = original.Split(',');
string reversed = split[1] + "," + split[0];
    
String reversedLatLong = String.Join(",", yourString.Split(',').Reverse());
    
在Jon Skeet的基础上,更通用的东西会很有用:
private static string Switch(this string text, char splitter)
{
    if(text != null && text.Length > 2) //Needs at least 3 letters for a valid switch
    {
        int position = text.IndexOf(splitter);
        if(position != -1) return text.Substring(position + 1) + splitter + text.Substring(0, position);
    }
    return text;
}

"99,-3432".Switch(',');
    
string myStr = "-94.5555,95.5555";
string[] components = myStr.Split(",")
components.Reverse();
string flippedStr = string.Join(",", components);
    
只是为了它。这是一个更快的版本,但你可能不需要它:) 对于1.000.000迭代,与Jon Skeets相比,在我的机器上以秒为单位测量干净版本:   00:00:00.2145657子串      00:00:00.0781270不安全
private unsafe static string SwitchSplitOnComma2(string text)
{
    int comma = text.IndexOf(',');
    string newString = string.Copy(text);
    fixed (char* src = text)
    {
        fixed (char* dst = newString)
        {
            int destCtr = 0;
            for (int i = comma + 1; i < text.Length; i++)
            {
                dst[destCtr++] = src[i];
            }
            dst[destCtr++] = ',';
            for (int i = 0; i < comma; i++)
            {
                dst[destCtr++] = src[i];
            }
        }
    }
    return newString;
}
    
最有效的是修改/扩展API,因为它无论如何都会解析字符串。可能不是一个选择,但我把它扔出去......     
这个怎么样?
string oldString = "-94.5555,95.5555";
string newString = oldString .Substring(oldString .IndexOf(",") + 1) + "," + oldString .Substring(0, oldString .IndexOf(","));
    

要回复问题请先登录注册