Programing

string. 목록에 참여

lottogame 2020. 10. 19. 07:37
반응형

string. 목록에 참여 또는 다른 유형


배열 또는 정수 목록을 다음과 같이 쉼표로 구분 된 문자열로 바꾸고 싶습니다.

string myFunction(List<int> a) {
    return string.Join(",", a);
}

그러나 string.Join List<string>은 두 번째 매개 변수 로만 사용됩니다 . 이를 수행하는 가장 좋은 방법은 무엇입니까?


가장 좋은 방법은 원하는 작업을 수행하는 오버로드가있는 .NET 4.0으로 업그레이드하는 것입니다.

업그레이드 할 수없는 경우 Select 및 ToArray를 사용하여 동일한 효과를 얻을 수 있습니다.

    return string.Join(",", a.Select(x => x.ToString()).ToArray());

.NET 3.5 용 일반 열거 가능한 문자열 조인 확장 가능 하고 안전한 구현입니다. 반복자의 사용법은 조인 문자열 값이 문자열 끝에 고정되지 않도록하는 것입니다. 0, 1 및 더 많은 요소에서 올바르게 작동합니다.

public static class StringExtensions
{
    public static string Join<T>(this string joinWith, IEnumerable<T> list)
    {
        if (list == null)
            throw new ArgumentNullException("list");
        if (joinWith == null)
            throw new ArgumentNullException("joinWith");

        var stringBuilder = new StringBuilder();
        var enumerator = list.GetEnumerator();

        if (!enumerator.MoveNext())
            return string.Empty;

        while (true)
        {
            stringBuilder.Append(enumerator.Current);
            if (!enumerator.MoveNext())
                break;

            stringBuilder.Append(joinWith);
        }

        return stringBuilder.ToString();
    }
}

용법:

var arrayOfInts = new[] { 1, 2, 3, 4 };
Console.WriteLine(",".Join(arrayOfInts));

var listOfInts = new List<int> { 1, 2, 3, 4 };
Console.WriteLine(",".Join(listOfInts));

즐겨!


.NET 2.0 :

static string IntListToDelimitedString(List<int> intList, char Delimiter)
{
    StringBuilder builder = new StringBuilder();

    for (int i = 0; i < intList.Count; i++)
    {
        builder.Append(intList[i].ToString());

        if (i != intList.Count - 1)
            builder.Append(Delimiter);
    }

    return builder.ToString();
}

이 대답은 아직 .NET 4.0의 깊이에 도전하고 싶지 않은 경우에 적합합니다.

String.Join ()은 각 요소 사이에 지정된 구분 기호를 사용하여 문자열 배열의 모든 요소를 ​​연결합니다.

구문은

public static string Join(
    string separator,
    params string[] value
)

Int 목록을 Join 메서드에 전달하는 대신 먼저 문자열 배열을 구축하는 것이 좋습니다.

내가 제안하는 것은 다음과 같습니다.

static string myFunction(List<int> a) {
    int[] intArray = a.ToArray();
    string[] stringArray = new string[intArray.Length];

    for (int i = 0; i < intArray.Length; i++)
    {
        stringArray[i] = intArray[i].ToString();
    }

    return string.Join(",", stringArray);
}

내가 이것으로 수정 한 유사한 확장 방법이 있었다

public static class MyExtensions
{
    public static string Join(this List<int> a, string splitChar)
    {
        return string.Join(splitChar, a.Select(n => n.ToString()).ToArray());
    }
}

그리고 당신은 이것을 이렇게 사용합니다

var test = new List<int>() { 1, 2, 3, 4, 5 };
string s = test.Join(",");

.NET 3.5


.NET 4.0 사용

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string s = myFunction(PopulateTestList());
        this.TextBox1.Text = s;
    }

    protected List<int> PopulateTestList()
    {
        List<int> thisList = new List<int>();
        thisList.Add(22);
        thisList.Add(33);
        thisList.Add(44);

        return thisList;
    }

    protected string myFunction(List<int> a)
    {
        return string.Join(",", a);
    }
}

.NET에서 목록 클래스에는 .ToArray()메서드가 있습니다. 다음과 같이 작동 할 수 있습니다.

string myFunction(List<int> a)
{
    return string.Join(",", a.ToArray());
}

참조 : List <T> 메서드 (MSDN)

참고 URL : https://stackoverflow.com/questions/3610431/string-join-on-a-listint-or-other-type

반응형