Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将循环逻辑转换为LINQ_C#_Linq_C# 4.0 - Fatal编程技术网

C# 将循环逻辑转换为LINQ

C# 将循环逻辑转换为LINQ,c#,linq,c#-4.0,C#,Linq,C# 4.0,有人知道有没有更干净的方法(也许是LINQ)?我想将该值分组到bucket中,并给它一个分数,例如,在下面的代码中,如果该值为: 小于或等于5,将分数增加1 10及以下,增加2分 15及以下,增加3分 其他增加4 有大约10个属性,我必须这样做,每个属性有不同的评分范围 public static PScore GetScore(IEnumerable<PStat> rs) { var data = new PScore(); forea

有人知道有没有更干净的方法(也许是LINQ)?我想将该值分组到bucket中,并给它一个分数,例如,在下面的代码中,如果该值为:

  • 小于或等于5,将分数增加1
  • 10及以下,增加2分
  • 15及以下,增加3分
  • 其他增加4
有大约10个属性,我必须这样做,每个属性有不同的评分范围

public static PScore GetScore(IEnumerable<PStat> rs)
    {
        var data = new PScore();

        foreach(var item in rs)
        {
            if(item.Kill <= 5)
            {
                data.Kills++;
            }
            else if (item.Kill <= 10)
            {
                data.Kills += 2;
            }
            else if (item.Kill <= 15)
            {
                data.Kills += 3;
            }
            else
            {
                data.Kills += 4;
            }
        }

        return data;
    }
公共静态PScore GetScore(IEnumerable rs)
{
var data=new PScore();
foreach(rs中的var项目)
{

如果(item.Kill我会使用LINQ对每个属性进行一些计算:

public static PScore GetScore(IEnumerable<PStat> rs)
{
   var data = new PScore();
   data.Kills = rs.Sum(item => Math.Min(item.Kill / 5 + (item.Kill % 5 == 0 ? 0 : 1), 4));
   return data;
}
公共静态PScore GetScore(IEnumerable rs)
{
var data=new PScore();
data.Kill=rs.Sum(item=>Math.Min(item.Kill/5+(item.Kill%5==0?0:1),4));
返回数据;
}

我会使用LINQ对每个属性进行计算:

public static PScore GetScore(IEnumerable<PStat> rs)
{
   var data = new PScore();
   data.Kills = rs.Sum(item => Math.Min(item.Kill / 5 + (item.Kill % 5 == 0 ? 0 : 1), 4));
   return data;
}
公共静态PScore GetScore(IEnumerable rs)
{
var data=new PScore();
data.Kill=rs.Sum(item=>Math.Min(item.Kill/5+(item.Kill%5==0?0:1),4));
返回数据;
}

通过使用
选择
rs
中获取
Kill
值,然后使用
求和
对其进行聚合,可以减少重复次数

public static PScore GetScore(IEnumerable<PStat> rs)
{
    return new PScore
    {
        Kills = rs.Select(item => item.Kill).Sum(kill =>
        {
            if (kill <= 5) return 1;
            if (kill <= 10) return 2;
            if (kill <= 15) return 3;
            return 4;
        })
    };
}
公共静态PScore GetScore(IEnumerable rs)
{
返回新PScore
{
Kills=rs.Select(item=>item.Kill).Sum(Kill=>
{

如果(kill您可以通过使用
选择
rs
中获取
kill
值,然后使用
求和
对其进行聚合,从而减少重复次数

public static PScore GetScore(IEnumerable<PStat> rs)
{
    return new PScore
    {
        Kills = rs.Select(item => item.Kill).Sum(kill =>
        {
            if (kill <= 5) return 1;
            if (kill <= 10) return 2;
            if (kill <= 15) return 3;
            return 4;
        })
    };
}
公共静态PScore GetScore(IEnumerable rs)
{
返回新PScore
{
Kills=rs.Select(item=>item.Kill).Sum(Kill=>
{

如果(kill,我认为答案是否定的。去掉多余的大括号以获得屏幕空间,我认为这段代码很好。我认为答案是否定的。去掉多余的大括号以获得屏幕空间,我认为这段代码很好。这是一个非常专业的数学技巧,a)不可理解,b)对他的需求来说太具体了。他有一个不同的计划用于不同的目的。事实上,从这个回答中我意识到这个问题纯粹是基于意见的,我只是投票决定结束。这也是不正确的。当
item.Kill
5
时,它添加了
5/5+1
,这是
2
。它应该添加
1
。我已经更正了我的公式,但这在这里不太重要-它不是非常专业的数学技巧,只是数学。它允许轻松地将分组值(5)和最大分数(4)更改为任何其他值,而无需重写许多行
if
s。因此它可以重用(提供了这两个参数)对于其他属性,这是一个非常特殊的数学技巧,a)不可理解,b)对他的需求来说太具体了。他有一个不同的计划用于不同的目的。事实上,从这个回答中我意识到这个问题纯粹是基于意见的,我只是投票决定结束。这也是不正确的。当
item.Kill
5
时,它添加了
5/5+1
,这是
2
。它应该添加
1
。我已经更正了我的公式,但这在这里不太重要-它不是非常专业的数学技巧,只是数学。它允许轻松地将分组值(5)和最大分数(4)更改为任何其他值,而无需重写许多行
if
s。因此它可以重用(提供了这两个参数)对于其他属性,很好。你把所有的<代码>别号>代码>关键字。在对象初始化器中,你使用分号<代码>;< /代码>属性分配。我认为这必须是逗号>代码> <代码>。可以考虑使用命名方法而不是lambda,如<代码>。 .jjpPurnistelsBueld:代码。谢谢。你把所有的<代码>别号>代码>关键字。在对象初始化器中,你使用分号<代码>;< /代码>属性分配。我认为这必须是逗号>代码> <代码>。可以考虑使用命名方法而不是lambda,如<代码>(GetKillScore)
@JeppeStigNielsen浏览器代码::)感谢您的关注。