Linq查询选择逗号分隔列表

时间:2013-01-23 10:08:17

标签: c# algorithm

我有一个对象列表,其中对象的字符串属性是以逗号分隔的数字ID列表。

提取逗号分隔值并获取int数组的最有效方法是什么?

目前我的解决方案是:

var allCsvs = objects
    .Select(o => o.IdCsv); // the IdCsv is a string property, ie "1,2,3,4,5"
var allIds = string.Join(",", allCsvs);
var idArray = allIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(id => Convert.ToInt32(id));

有关如何提高绩效的任何想法吗?

更新

对象可能如下所示:

class MyClass {
    public string IdCsv { get; set; }
}

此类的实例可能将其字符串属性IdCsv设置为如下所示:"1,2,3,4,5"

1 个答案:

答案 0 :(得分:1)

试试这个:

internal class Csv
{
    public string CommaSepList { get; set; }
}


var allCsvs =
    new List<Csv>
        {
            new Csv
                {
                    CommaSepList = "1,2,3,4,,5"
                },
            new Csv
                {
                    CommaSepList = "4,5,7,,5,,"
                },
        };

int[] intArray =
    allCsvs
        .SelectMany(c => c.CommaSepList.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
        .Select(int.Parse)
        .ToArray();

或者

int[] intArray =
    allCsvs
        .SelectMany(c => c.CommaSepList.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse))
        .ToArray();