我有一个IEnumerable
对象,其中有一个名为Data
的字段。
Data
的值由';'
分隔。
我需要将Data
与';'
分开并将其分配到同一个IEnumerable
中的另一个字段中,这是一个数组元素。
例如:
IEnumerable<Object> =
[{
Data = "123;345",
DataList = {}
},
{
Data = "32424;87878",
DataList = {}
}]
并继续..
我需要在每行中拆分Data
并分配到同一行中的DataList
。
任何人都可以提供lambda表达式来做同样的事情
答案 0 :(得分:1)
暂停表现暂时我将从内联&#34;优雅&#34;开始(基于意见) 替代传统ForEach 问题的解决方案:
collection.ToList().ForEach(item => { item.DataList = item.Data.Split(';'); });
现在,看ReferenceSource ForEach
背后的实际情况,这是一个简单的循环:
for(int i = 0 ; i < _size; i++) {
/* O(1) code */
action(_items[i]);
}
请注意,这不是一个linq解决方案。它使用lambda表达式,但ForEach
不是linq的函数
现在回到表演。有两个问题。
Action
进行另一个函数调用。 IEnumerable<T>
。 ForEach
是IList
的一种方法。因此有
是对ToList()
的调用,它在执行时创建一个新集合
O(n)
这是不需要的。我只是采用简单的直接解决方案:
foreach(var item in collection)
{
item.DataList = item.Data.Split(';');
}
关于linq的一般说明: