首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Char的集合传递给population的方法是最有效的

将Char的集合传递给population的方法是最有效的
EN

Stack Overflow用户
提问于 2010-04-24 06:55:44
回答 3查看 176关注 0票数 3

这是获取字符集合的最佳方式吗?想知道对于像char这样的原语使用List是不是太过分了?

代码语言:javascript
复制
private void GetChars(ref List<char> charsToPopulate)  
{  
    foreach(Thing t in Things)  
    {  
       charsToPopulate.Add(t.CharSymbol);  
    }  
}  
EN

回答 3

Stack Overflow用户

发布于 2010-04-24 07:10:33

使用惰性序列将允许您在如何处理字符方面有很大的灵活性。你真的应该把这个方法重构成类似这样的东西。

代码语言:javascript
复制
private IEnumerable<char> GetChars(IEnumerable<Thing> things)
{
    return things.Select(thing => thing.CharSymbol);
}

这样他们就可以把它包装成他们想要的任何集合:

代码语言:javascript
复制
var list = GetChars(Things).ToList();
var array = GetChars(Things).ToArray();

或者将该方法全部删除:

代码语言:javascript
复制
var chars = Things.Select(thing => thing.CharSymbol).ToList();
票数 3
EN

Stack Overflow用户

发布于 2010-04-24 07:00:05

您将希望通过值传递对列表的引用,而不是通过引用:

代码语言:javascript
复制
private void GetChars(List<char> charsToPopulate)  

除此之外,你的代码也没问题。使用诸如char之类的原始类型的列表是非常常见的。

如果您对编写稍有不同的相同实现感兴趣,您可以使用LINQ从以下内容填充列表:

代码语言:javascript
复制
{
    charsToPopulate.AddRange(from t in things select t.CharSymbol);
}

顺便说一句,在方法中创建列表没有错。在将列表传递给方法之前,您不需要“分配”列表:

代码语言:javascript
复制
private List<char> GetChars()
{
    List<char> charsToPopulate = new List<char>();
    foreach(Thing t in Things)  
    {  
       charsToPopulate.Add(t.CharSymbol);  
    }  
    return charsToPopulate;
}

或者使用LINQ:

代码语言:javascript
复制
private List<char> GetChars()
{
    return things.Select(t => t.CharSymbol)
                 .ToList();
}
票数 1
EN

Stack Overflow用户

发布于 2010-04-24 07:01:21

最有效的方法是接收一个预先分配的字符数组,您可以向其中写入元素。当然,这需要提前知道大小。

第二个最有效的方法是在方法中分配数组,然后填充它。这仍然需要一些能力来快速计算Things的大小,但至少对调用者隐藏了它。

如果没有办法预先知道大小(例如,Things是一个延迟序列,它足够大,缓存它是不可行的),那么你的解决方案很可能是最好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2702420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档