将大型整数列表拆分为C#中的字符串列表的最快方法

时间:2017-05-08 11:28:33

标签: c#

我的目标是将24043个整数列表拆分为以下字符串:

" IDS =" +" 1,2,3 ...... 198,199,200"

在性能方面,你能想到比我更好的解决方案吗?

    public List<string> ZwrocListeZapytan(List<int> listaId)
    {
        var listaZapytan = new List<string>();

        if (listaId.Count == 0) return listaZapytan;

        var zapytanie = "?ids=";
        var licznik = 1;

        for (var i = 0; i < listaId.Count; i++)
        {
            if (licznik == 200 || i == listaId.Count - 1)
            {
                listaZapytan.Add(zapytanie + listaId[i]);
                zapytanie = "?ids=";
                licznik = 1;
            }
            else
            {
                zapytanie += listaId[i] + ",";
                licznik++;
            }
        }
        return listaZapytan;
    }

1 个答案:

答案 0 :(得分:1)

  

在性能方面,你能想到比我更好的解决方案吗?

对于性能而言,作为代码增强功能,我脑海中唯一想到的是在连接字符串时使用StringBuilder

public List<string> ZwrocListeZapytan(List<int> listaId)
{
    var listaZapytan = new List<string>();

    if (listaId.Count == 0) return listaZapytan;

    StringBuilder sb = new StringBuilder();
    sb.Append("?ids=");        

    var licznik = 1;

    for (var i = 0; i < listaId.Count; i++)
    {    
        if (licznik == 200 || i == listaId.Count - 1)
        {
            listaZapytan.Add(sb.ToString() +listaId[i]);
            sb.Clear();
            sb.Append("?ids=");
            licznik = 1;    
        }
    else
    {
        sb.Append(listaId[i] + ",");
        licznik++;
    }        return listaZapytan;
}

否则你可以以200的步长运行for循环。在每一步中取出给定范围内的数字并使用String.Join创建字符串:

// TEST DATA
List<int> listaId = Enumerable.Range(1, 420).ToList();

List<string> listaZapytan = new List<string>();
int stepsize = 200;

for (int i = 0; i < listaId.Count; i +=stepsize)
{
    listaZapytan.Add("?ids=" + String.Join(",", listaId.Skip(i).Take(stepsize)));
}