这是获取字符集合的最佳方法吗?想知道使用List来处理像char这样的基元会有多大用处?最有效的方法是将Char的一个集合传递给人口的方法
private void GetChars(ref List<char> charsToPopulate)
{
foreach(Thing t in Things)
{
charsToPopulate.Add(t.CharSymbol);
}
}
这是获取字符集合的最佳方法吗?想知道使用List来处理像char这样的基元会有多大用处?最有效的方法是将Char的一个集合传递给人口的方法
private void GetChars(ref List<char> charsToPopulate)
{
foreach(Thing t in Things)
{
charsToPopulate.Add(t.CharSymbol);
}
}
你会想按值传递的参考名单,而不是参考:
private void GetChars(List<char> charsToPopulate)
除此之外,你的代码是好的。对原始类型使用列表(如char
)非常常见。
如果您有兴趣编写相同的实现略有不同,你可以使用LINQ从东西填充列表:
{
charsToPopulate.AddRange(from t in things select t.CharSymbol);
}
BTW,没有什么不妥之内创建列表方法。你不需要将它传递给方法之前,“分配”名单:
private List<char> GetChars()
{
List<char> charsToPopulate = new List<char>();
foreach(Thing t in Things)
{
charsToPopulate.Add(t.CharSymbol);
}
return charsToPopulate;
}
或使用LINQ:
private List<char> GetChars()
{
return things.Select(t => t.CharSymbol)
.ToList();
}
最有效的方法是接收字符预分配的阵列,以你会写元素。当然,这需要事先知道尺寸。
第二个最有效的方法是在该方法内分配数组,然后填充它。这仍然需要一些能力来快速计算Things
的大小,但至少可以将其隐藏起来。
如果没有办法事先确定大小(例如Things
是一个足够大的缓存而不可行的延迟序列),那么您的解决方案可能会达到最佳效果。
使用惰性序列将为您提供大量的灵活性,使您可以使用字符。你真的应该重构这个方法。
private IEnumerable<char> GetChars(IEnumerable<Thing> things)
{
return things.Select(thing => thing.CharSymbol);
}
这样,他们可以把它包装成任何收集他们想:
var list = GetChars(Things).ToList();
var array = GetChars(Things).ToArray();
或删除方法一起:
var chars = Things.Select(thing => thing.CharSymbol).ToList();
你并不需要使用'ref'这里。您已经将参考传递给您的列表(因为列表是参考类型)。 –
2010-04-23 23:20:04
不需要添加snarky标签。 – ChaosPandion 2010-04-23 23:30:12