【问题标题】:Data collection with 3 elements per entry每个条目包含 3 个元素的数据收集
【发布时间】:2016-03-29 20:56:31
【问题描述】:

.net 框架中是否有数据集合(理想情况下在collections.generic 中可以处理三个不同的对象(比如说intstringfloat),从而可以在给定的情况下访问其他两个元素元素之一(假设每个对象都是唯一的)。

我不知道这是否会存在,或者即使它可以被创建,但理想情况下它的工作方式类似于Dictionary<key,value>,但本质上是Collection <key,key,key> 可以像@987654328 一样使用的安排@。

正如我所说,我不知道这种安排是否存在;如果是,请您指出正确的方向,如果不是,请告诉我是否有任何想法可以实现这一点。

提前致谢。

【问题讨论】:

标签: c# collections


【解决方案1】:

与您正在寻找的最接近的开箱即用数据结构是List<Tuple<int, string, float>>。您可以轻松地使用 linq 搜索符合三个部分中任何一个条件的对象。

但是,创建一个代表您的元素的自定义类型并不是很多工作:

public class Element 
{
    public int IntValue {get; set;}
    public string StringValue {get; set;}
    public float FloatValue {get; set;}
}

多键字典也不会太难 - 只需覆盖每种类型的索引器。请注意,所有三种类型都必须是不同的,否则您将收到编译器错误,因为编译器不知道您绑定到哪个索引器。

优点是您可以为每个值使用适当的名称 - int 值代表什么?这是自定义类相对于Tuple 的一大优势是context

我还要注意,float 值的“平等”可能很棘手。 看起来相等的两个浮点值实际上可能会略有不同。浮点值通常通过在指定容差范围内进行比较来进行比较。因此,对于像Dictionary 这样的索引结构,它们通常会生成糟糕的键。

【讨论】:

  • 出色的答案,谢谢。您能否通过覆盖索引器来扩展您的意思?另外,不要太担心类型,给定的只是示例,因为用例将是 GameObject、Coord 和 Piece,它们是非标准的
  • 我的意思是添加三个indexer overrides,这样你就可以做到collection[GameObject]collection[Coord]collection[Piece]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2017-09-11
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多