這是獲取字符集合的最佳方法嗎?想知道使用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