c# - List <T> 仅当它是所有元素中的最小值时才添加值

标签 c# list generics

我有如下 2 个语句来绘制图表。

public static List<KeyValuePair<int, double>> entries = new List<KeyValuePair<int, double>>();
entries.Add(new KeyValuePair<int, double>(j, min));

我想要的是 min 值只有在小于或等于列表中所有其他 min 值时才会添加到列表中。 如何实现? 谢谢。

最佳答案

只需计算所有条目的最小值并检查它是否大于您的min 值:

if (!entries.Any() || min <= entries.Min(e => e.Value))
   entries.Add(new KeyValuePair<int, double>(j, min));

更新:在尝试找到最小值之前,您还需要检查条目列表中是否有任何元素。

提示:如果你总是使用这个规则来添加项目并且不以其他方式修改集合(即删除项目或在某个索引处插入)那么你可以简单地检查最后一个项目的值 - 它总是小于或等于其他值。

更新:您可以为属性和类本身创建具有描述性名称的自定义类(您可以考虑更好的名称),而不是为您的数据使用 KeyValuePair:

public class Point
{
    public Point(int iteration, double value)
    {
        Iteration = iteration;
        Value = value;
    }

    public int Iteration { get; private set; }
    public double Value { get; private set; }
}

然后创建封装点和与这些点相关的行为的类。根据您的描述,它可能是这样的:

public class DecresingGraph
{
    private List<Point> points = new List<Point>();

    public void Add(Point point)
    {
        if (!points.Any())
        {
            points.Add(point);
            return;
        }

        if (point.Value <= points.Last().Value)
            points.Add(point);
    }

    public IEnumerable<Point> Points 
    {
        get { return points; }
    }
}

关于c# - List <T> 仅当它是所有元素中的最小值时才添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454751/

相关文章:

c# - 动态数据网格,可选列

c# - 如何从不同应用程序的窗口控件中读取数据?

c# - 在 ASP.NET C# Web 应用程序中动态创建图像的正确方法?

r - 对列表的特定元素求和

c# - 如何获取基类的泛型类型参数?

c# - 将图像从 Bitmap 以 png 格式上传到服务器

python - 如何使用 Python 拆分和忽略文件路径字符串中的分隔符

c# - 如何序列化自定义对象类型列表

scala - 具有类型成员的 Case 对象的模式匹配

java - 在不传递 Class<T> 参数的情况下找出 T.class