我有一个名为ctext
的逗号分隔字符串,我希望将其拆分并放入List<string>
。
将使用LINQ,
List<string> f = ctext.Split(',').ToList();
慢于不使用LINQ?
List<string> f;
f.AddRange(ctext.Split(','));
似乎LINQ实际上会在某个地方复制某些内容会使其变慢,而AddRange()
只会检查列表的大小一次,展开它并将其转储。
还是有更快的方法吗? (比如使用for
循环,但我对此表示怀疑。)
答案 0 :(得分:7)
幸运的是,我们可以轻松查看ToList
现在所做的开源。 (点击最新来源的链接......)
我之前没有见过AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setMessage("I want THIS word to be bold and the rest normal!")
.create().show();
,但我怀疑数组是否实现了它,这意味着我们基本上已经IListProvider<T>
了。查看List<T>
来源显示构造函数和new List<TSource>(source)
基本上都使用AddRange
。
换句话说,除了几个间接层次之外,我希望他们都做同样的事情。
答案 1 :(得分:3)
似乎LINQ实际上会在某个地方复制某些内容会使其变慢,而AddRange()只会检查列表的大小一次,展开它并将其转储。
你是正确的,这两件事情都在发生,但在认为每一件事都特定于那一项行动时是错误的。 flatpickr("#dayCreate", {
onDayCreate: function(dObj, dStr, fp, dayElem) {
var date = moment(dayElem.dateObj).format(),
value = datesForPicker[date];
if( value ){
dayElem.className += ' ' + value;
}
}
});
和ToList
都执行这两项操作。两个操作都将输入序列中的所有值复制到列表中,由于它们同时添加了多个项目,因此它们能够同时查看扩展列表内部容量的程度,而不是需要进行多次扩展。