首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于.Take()还是非.Take(),这是一个问题

对于.Take()还是非.Take(),这是一个问题
EN

Stack Overflow用户
提问于 2011-03-25 19:54:59
回答 2查看 213关注 0票数 5

我有一个集合,代表每个年龄的人口(男性,女性)。

为了通过时间预测人口,我必须先与女性一起计算,这样我才能根据男性出生率的统计常数来计算新生男女的百分比。

尽管如此,我有第一个矩阵,其中包括男性和女性的每岁人口。

代码语言:javascript
复制
// Where 1 is the evaluation Id and 2009 the year I want the 
// initial population information for.
IList<AnnualPopulation> initialPopulation = 
    LoadMatrix<AnnualPopulation>(1, 2009);

现在,为了首先预测妇女人口,我使用以下方法:

代码语言:javascript
复制
IList<AnnualPopulation> initialWomenPopulation = (
        from w in initialPopulation
        where String.Equals("F", w.Gender)
        select w
    ).FirstOrDefault();

我必须考虑当前的死亡率(第一年(2009))和我希望预测的年份的死亡率,我已经知道了每一年的死亡率。

代码语言:javascript
复制
IList<AnnualDeathRate> deathRates = LoadMatrix<AnnualDeathRate>(1, 2009)

这将载入2009年及以后的每一年的皮革率。因此,为了只考虑2009年和2010年,比方说,我使用了以下Linq代码。

代码语言:javascript
复制
AnnualDeathRate[] femaleDeathRates = (
        from fdr in deathRates
        where (string.Equals("F", fdr.Gender))
        select fdr
    ).TakeWhile(dr => 
        initialWomenPopulation.Year == dr.Year || 
        dr.Year == initialWomenPopulation.Year + 1
    ).ToArray()

问答器

如果我在dr.Year

  • Are上使用了.Take(2)和一个补充的where条件,那么
  1. 会更好吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-25 20:10:56

实际上,#1可能会产生与当前代码不同的结果。例如,如果顺序是随机的(我在任何地方都没有看到任何排序),则当前代码可能返回任意数量的结果(例如,如果第一个元素不匹配这两个条件,则没有结果,即使后面的条件匹配)。

这听起来更正确(除非你真的想要TakeWhile的行为),你是说你想要的前2个结果符合给定的条件,不管它们是否是最初列表中的第一个结果。

例如

代码语言:javascript
复制
var numbers = new[] {2, 3, 1, 4};
Console.WriteLine("TakeWhile");

foreach(var n in numbers.TakeWhile(x => x == 1 || x == 2))
{
    Console.Write(n);
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("WhereTake2");

foreach (var n in numbers.Where(x => x == 1 || x == 2).Take(2))
{
    Console.Write(n);
} 

指纹:

代码语言:javascript
复制
TakeWhile
2

WhereTake2
21
票数 1
EN

Stack Overflow用户

发布于 2011-03-25 20:00:52

我会将子句包含在查询的TakeWhile调用中的where子句中,有理由不这样做吗?从长远来看,两者之间可能没有太大的区别,但TakeWhile似乎没有必要,并且使您的代码更加混乱,IMO。

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

https://stackoverflow.com/questions/5437455

复制
相关文章

相似问题

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