c# - 使用哪个 C# 集合代替 List<KeyValuePair<string, double>>?

标签 c# data-structures collections

我想存储数据如

{
 {"apple",15   }
 {"pear",12.5  }
 {"", 10       }
 {"", 0.45     }
}

数据将绘制在条形图上(字符串为图例, double 为值) 插入顺序很重要。 性能无关紧要。 字符串可以重复或为空。(值也可以重复)

我需要获取最小值和最大值(如果可能的话很容易)来设置比例。

我用

List<KeyValuePair<string, double>> data = new List<KeyValuePair<string, double>>();
data.Add(new KeyValuePair<string,double>("",i));

非常无聊且不可读。 有更简洁的方法吗?

StringDoubleCollection data = new StringDoubleCollection();
data.add("apple",15);
data.add("",10);

double max = data.values.Max(); 
double min = data.values.Min();

如果不是如何获得 List<KeyValuePair<string, double>> 的最大值没有太多麻烦

NameValueCollection 看起来不错,但它是一个 <string,string>我需要一个 <string,double>

最佳答案

您可以创建如下类:

class X
{
     public string Name { get; set; }
     public double Value { get; set; }

     // name is an optional parameter (this means it can be used only in C# 4)
     public X(double value, string name = "")
     {
         this.Name = name;
         this.Value = value;
     }

     // whatever
}

然后使用带有选择器的 LINQ 获取最大值和最小值:

var data = new List<X>();
data.Add(new X(35.0, "Apple"))
data.Add(new X(50.0));

double max = data.Max(a => a.Value);
double min = data.Min(a => a.Value);

编辑:如果上面的代码对您来说仍然不可读,请尝试在您只想获得值的情况下使用运算符来改进它。

// Inside X class...
public static implicit operator X(double d)
{
    return new X(d);
}

// Somewhere else...
data.Add(50.0);

关于c# - 使用哪个 C# 集合代替 List<KeyValuePair<string, double>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7503693/

相关文章:

c# - 未使用的 using 指令如何影响性能?

c# - 根据创建日期获取文件列表

java - 如何制作一个可以根据时间戳保存 100 个最近的 record_values 的数据结构?

java - 如何对对象的数组列表进行排序

c# - 把一些 parent 的 child 某项属性(property)等于某项值(value)的记录退回去?

C#: "Cannot create an instance of the static class"

c++ - C++ 中的函数式数据结构

java - 迭代包含用户定义对象的 HashSet 元素并显示满足特定条件的元素

Java 8 Stream - 查找最大的嵌套列表

c# - 使用 Entity Framework 保存实体列表