0

これに対する解決策を見つけるために多くのことを検索しましたが、何も見つかりませんでした。ただし、何を検索すればよいかわからないためだと思います。

まず、配列に変換する文字列があります。文字列は次のようにフォーマットされます。

"99.28099822998047,68.375 118.30699729919434,57.625 126.49999713897705,37.875 113.94499683380127,11.048999786376953 96.00499725341797,8.5"

次のコードで配列を作成します。

    public static Array StringToArray(string String)
    {
        var list = new List<string>();
        string[] Coords = String.Split(' ', ',');
        foreach (string Coord in Coords)
        {
            list.Add(Coord);
        }
        var array = list.ToArray();
        return array;
    }

今私の問題は次のとおりです。同じフォーマットで文字列に変換する方法を見つけようとしています。したがって、次を使用して簡単に文字列を作成できます。

    public static String ArrayToString(Array array)
    {
        string String = string.Join(",", array);
        return String;
    }

そして、できれば 2 つおきの "," をスペース (" ") に置き換えてください。これは可能ですか?または、これを行う他の方法はありますか?

前もって感謝します!私の質問が理にかなっていることを願っています。

4

5 に答える 5

2

必要なことを行う組み込みの方法はありません。ただし、必要なものを達成するのは非常に簡単です。

public static string[] StringToArray(string str)
{
    return str.Replace(" ", ",").Split(',');
}

public static string ArrayToString(string[] array)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i <= array.Length-1; i++)
    {
        sb.AppendFormat(i % 2 != 0 ? "{0} " : "{0},", array[i]);
    }
    return sb.ToString();
}
于 2013-06-26T13:36:35.530 に答える
1

ここにそれを行うためのルートがあります。他のソリューションが最後のコンマまたはスペースを削除しているとは思いません。テストも入れます。

public static String ArrayToString(Array array)
{
    var useComma = true;
    var stringBuilder = new StringBuilder();

    foreach (var value in array)
    {
        if (useComma)
        {
            stringBuilder.AppendFormat("{0}{1}", value, ",");
        }
        else
        {
            stringBuilder.AppendFormat("{0}{1}", value, " ");
        }

        useComma = !useComma;
    }

    // Remove last space or comma
    stringBuilder.Length = stringBuilder.Length - 1;

    return stringBuilder.ToString();
}

[TestMethod]
public void ArrayToStringTest()
{
    var expectedStringValue =
        "99.28099822998047,68.375 118.30699729919434,57.625 126.49999713897705,37.875 113.94499683380127,11.048999786376953 96.00499725341797,8.5";
    var array = new[]
        {
            "99.28099822998047",
            "68.375",
            "118.30699729919434",
            "57.625",
            "126.49999713897705",
            "37.875",
            "113.94499683380127",
            "11.048999786376953",
            "96.00499725341797",
            "8.5",
        };

    var actualStringValue = ArrayToString(array);

    Assert.AreEqual(expectedStringValue, actualStringValue);
}
于 2013-06-26T13:48:00.947 に答える
0

それを行う別の方法:

string inputString = "1.11,11.3 2.22,12.4 2.55,12.8";
List<string[]> splitted = inputString.Split(' ').Select(a => a.Split(',')).ToList();
string joined = string.Join(" ", splitted.Select(a => string.Join(",",a)).ToArray());

「分割された」リストは次のようになります。

1.11 11.3

2.22 12.4

2.55 12.8

「joined」文字列は「inputString」と同じです

于 2013-06-26T13:49:00.803 に答える
0

この問題に対する別のアプローチを次に示します。

    public static string ArrayToString(string[] array)
    {
        Debug.Assert(array.Length % 2 == 0, "Array is not dividable by two.");

        // Group all coordinates as pairs of two.
        int index = 0;
        var coordinates = from item in array
                          group item by index++ / 2
                              into pair
                              select pair;

        // Format each coordinate pair with a comma.
        var formattedCoordinates = coordinates.Select(i => string.Join(",", i));

        // Now concatinate all the pairs with a space.
        return string.Join(" ", formattedCoordinates);
    }

そして簡単なデモンストレーション:

    public static void A_Simple_Test()
    {
        string expected = "1,2 3,4";
        string[] array = new string[] { "1", "2", "3", "4" };
        Debug.Assert(expected == ArrayToString(array));
    }
于 2013-06-26T14:18:48.600 に答える