我有一个对象列表,其中对象的字符串属性是以逗号分隔的数字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"
答案 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();