【问题标题】:c# Array or Collectionc# 数组或集合
【发布时间】:2011-02-21 17:07:33
【问题描述】:

你会如何处理这个问题?我有一个数据列表,其中包含需要存储价格和项目的两件事,无论如何在不知道我将拥有的总行数的情况下将其存储在数组中吗?或者我应该使用一个集合可以是多维的吗?

谢谢

【问题讨论】:

    标签: c# arrays collections generic-collections


    【解决方案1】:

    是的 - 我建议您查看一个通用列表。使用它,您可以对数据进行建模并存储任意数量的项目。

    例如

      public class PricedItem
        {
            public decimal Price { get; set; }
            public object Item { get; set; }
        }
    

    然后可以在 List<PricedItem> 中存储/检索这些 - 或作为“定价项目列表”。

    希望有帮助

    【讨论】:

    • 我找不到关于在集合中有多个列这可能吗?
    • 集合中不能有多个列。集合包含对象,您可以在一个对象上拥有任意数量的属性。
    • 你想要一个数组还是一个矩阵?如果你想要列表列表(有点像锯齿状数组),你可以像 List<List<PricedItem>> 那样做。
    【解决方案2】:

    使用包含您的价格和商品的某种复合类型的List<>。有一个称为KeyValuePair<> 的内置结构类型将允许您存储强类型的键(项目)和值(价格)。 List<KeyValuePair<string, string>> 和一些 Linq 将允许您基于行、键或值执行查找。如果要根据商品查找价格,Dictionary 是 Key 可访问的 KeyValuePair 的集合,可以提供类似的功能但使用不同的内部结构,因此无法按行号访问。

    【讨论】:

    • 新的Tuple 类型也是在没有键值关系时将值捆绑在一起的好方法。
    【解决方案3】:

    听起来您应该使用“字典”通用集合,例如项目 id 作为键,价格作为值。

    如果您想在集合中获得更多信息,您甚至可以在字典中存储项目类的实例。因此,如果您的商品类具有 id、名称、描述、价格等属性,您可以执行以下操作

    Dictionary<int, item> items = new Dictionary<int, item>();
    items.add(myitem.id, myitem);
    

    然后对于任何项目 ID,您都可以访问这样的信息

    string description = items[id].description; 
    decimal price = items[id].price;
    

    【讨论】:

      【解决方案4】:

      你可以有

      struct Item
      {
          float Price;
          string ItemName;
      }
      

      List<Item> items = new List<Item>();
      items.Add(new Item{Name="item1", Price=19.99});
      

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 2017-04-22
        • 2020-05-10
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        相关资源
        最近更新 更多