【发布时间】:2011-02-21 17:07:33
【问题描述】:
你会如何处理这个问题?我有一个数据列表,其中包含需要存储价格和项目的两件事,无论如何在不知道我将拥有的总行数的情况下将其存储在数组中吗?或者我应该使用一个集合可以是多维的吗?
谢谢
【问题讨论】:
标签: c# arrays collections generic-collections
你会如何处理这个问题?我有一个数据列表,其中包含需要存储价格和项目的两件事,无论如何在不知道我将拥有的总行数的情况下将其存储在数组中吗?或者我应该使用一个集合可以是多维的吗?
谢谢
【问题讨论】:
标签: c# arrays collections generic-collections
是的 - 我建议您查看一个通用列表。使用它,您可以对数据进行建模并存储任意数量的项目。
例如
public class PricedItem
{
public decimal Price { get; set; }
public object Item { get; set; }
}
然后可以在 List<PricedItem> 中存储/检索这些 - 或作为“定价项目列表”。
希望有帮助
【讨论】:
List<List<PricedItem>> 那样做。
使用包含您的价格和商品的某种复合类型的List<>。有一个称为KeyValuePair<> 的内置结构类型将允许您存储强类型的键(项目)和值(价格)。 List<KeyValuePair<string, string>> 和一些 Linq 将允许您基于行、键或值执行查找。如果要根据商品查找价格,Dictionary 是 Key 可访问的 KeyValuePair 的集合,可以提供类似的功能但使用不同的内部结构,因此无法按行号访问。
【讨论】:
Tuple 类型也是在没有键值关系时将值捆绑在一起的好方法。
听起来您应该使用“字典”通用集合,例如项目 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;
【讨论】:
你可以有
struct Item
{
float Price;
string ItemName;
}
和
List<Item> items = new List<Item>();
items.Add(new Item{Name="item1", Price=19.99});
【讨论】: