坚持如何为NumberList创建DeleteBelow / Above和CountBelow / Above方法

时间:2018-10-07 22:44:56

标签: c#

大家好,我试图创建一个NumberList类,该类将跟踪任意数量的浮点值的列表。还可以使用私有列表对这些值执行运算,以跟踪数字。

在创建四种方法时遇到了麻烦:

  • 无效DeleteBelow(浮动阈值)

此方法从列表中删除所有低于阈值的数字。如果myList是一个包含{1、2、3}的NumberList,则调用myList.DeleteBelow(1.5)将删除1,仅留下{2、3}。

  • void DeleteAbove(浮动阈值)

此方法从列表中删除所有超过阈值的数字。如果myList是一个包含{1、2、3}的NumberList,则调用myList.DeleteAbove(1.5)将删除2和3,仅保留{1}。

  • int CountBelow(浮动阈值)

此方法计算列表中有多少个数字低于阈值。如果myList是一个包含{1、2、3}的NumberList,则调用myList.CountBelow(2.5)将返回2。

  • int CountAbove(浮动阈值)

此方法计算列表中超过阈值的数字。如果myList是一个包含{1、2、3}的NumberList,则调用myList.CountAbove(2.5)将返回1。

我想知道是否有人能够帮助我/指出正确的方向?

〜干杯

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Numbers

{

public class NumberList
{
    // Your private List<float> field should go here
    private List<float> myList;

    public void Add(float number)
    {
        myList.Add(3);
    }

    public List<float> Numbers()
    {
        return myList;
    }
    public float Minimum()
    {
        return myList.Min();
    }
    public float Maximum()
    {
        return myList.Max();
    }
    public float Sum()
    {
        return myList.Sum();
    }
    public float Average()
    {
        return myList.Sum() /myList.Count();
    }
public int Count()
    {
             return myList.Count(); 
    }
public void DeleteBelow(float threshold)
    {
      //       myList.DeleteBelow(1.5) 
    }

public void DeleteAbove(float threshold)
    {
//       myList.DeleteAbove(1.5);
    }
    public int CountBelow(float threshold)
    {
       int CountBelow = 0;
        for (int i = myList.Count is; i > 0; i--)
        {
            if (NumberList(i) > threshold) ;
            {
                //...
            }
        }
    public int CountAbove(float threshold)
    {
//      return myList.CountAbove(2.5);
    }
}

3 个答案:

答案 0 :(得分:0)

public void DeleteBelow(float threshold)
{
          myList.RemoveAll(x => x < threshold); 
}

public void DeleteAbove(float threshold)
{
          myList.RemoveAll(x => x > threshold); 
}

public int CountBelow(float threshold)
{
     return myList.Count(x => x < threshold);
}

public int CountAbove(float threshold)
{
     return myList.Count(x => x > threshold);
}

答案 1 :(得分:0)

您可以使用foreach循环遍历列表的所有项目,然后可以检查列表中的每个元素是否超过阈值。当它做完你想做的事。

答案 2 :(得分:0)

我会鼓励您遵循immutability的道路。这将使您的类更易于维护,因为它可以使您避免讨厌的副作用(如果使用的是DeleteBelow,则通常在DeleteAbovemyList.Remove()中)。 我还简化了Average,因为LINQ已经提供了这种方法。

public sealed class NumberList
{
    private readonly IEnumerable<float> myList;
    public NumberList(IEnumerable<float> numbers) => myList = numbers;
    public NumberList Add(float number) => new NumberList(myList.Concat(new[] { number }));
    public List<float> Numbers() => myList.ToList();
    public float Minimum() => myList.Min();
    public float Maximum() => myList.Max();
    public float Sum() => myList.Sum();
    public float Average() => myList.Average();
    public int Count() => myList.Count();
    public int CountBelow(float threshold) => myList.Count(n => n < threshold);
    public int CountAbove(float threshold) => myList.Count(n => n > threshold);
    public NumberList DeleteBelow(float threshold) => new NumberList(myList.Where(n => n >= threshold));
    public NumberList DeleteAbove(float threshold) => new NumberList(myList.Where(n => n <= threshold));
}