现在哪个数据结构更好?

时间:2012-01-22 07:57:15

标签: c#

我之前有像这样的数据库

ItemName  Price

对项目名称我有哈希表的价格。我的一些代码就像这样

Hashtable pricesTilesBox = new Hashtable();
string  itemNameData=myReader["ItemName"].ToString().Trim();
int price=Convert.ToInt32(myReader["Price"]);
pricesTilesBox.Add(itemNameData,price);
foreach (string key in pricesTilesBox.Keys) 
{
 Console.WriteLine(key + '=' + pricesTilesBox[key]);
}

但现在我已经更改了数据库表

ItemName  PriceLight PriceDark

现在可以使用哪种数据结构,我可以PriceLight PriceDarkitemName。因为现在有两种价格。在这种情况下是否也可以使用哈希表?

5 个答案:

答案 0 :(得分:1)

如何使用List<TileBox>

public class TileBox
{
 public string Name {get; set;}
 public decimal PriceLight {get; set;}
 public decimal PriceDark {get; set;}
}

List<TileBox> tileBoxes = new List<TileBox>();

//loop here to add TileBoxes to the List
{
 TileBox tileBox = new TileBox();
 tileBox.Name = myReader["ItemName"].ToString().Trim();
 tileBox.PriceLight = Convert.ToDecimal(myReader["PriceLight"]);
 tileBox.PriceDark = Convert.ToDecimal(myReader["PriceDark"]);
 tileBoxes.Add(tileBox);
}

这种方式还支持稍后向TileBox添加字段。您只需要更改类TileBox来保存新字段,并且可能需要读取器循环来将字段读入类中,其余代码可以保持不变。

答案 1 :(得分:1)

为什么不创建一个类Price

public class Price
{
 public decimal PriceLight { get; set; }
 public decimal PriceDark  { get; set; }
}

然后使用Dictionary<string,Price>

答案 2 :(得分:1)

如果您仍希望能够使用散列表行为轻松根据其名称查找条目:

public class Entry {
  public string ItemName { get; set; }
  public int PriceLight { get; set; }
  public int PriceDark { get; set; }
}

Dictionary<string, Entry> pricesTilesBox = new Dictionary<string, Entry>();

string  itemNameData=myReader["ItemName"].ToString().Trim();
int light=Convert.ToInt32(myReader["PriceLight"]);
int dark=Convert.ToInt32(myReader["PriceDark"]);
pricesTilesBox.Add(itemNameData,new Entry { ItemName = itemNameData, PriceLight = light, PriceDark = dark });
foreach (string key in pricesTilesBox.Keys) 
{
 Console.WriteLine(key + '=' + pricesTilesBox[key]);
}

答案 3 :(得分:0)

你可以简单地创建一个class来保存两个项目

MyClass
{
    PriceLight;
    PriceDark;
}

使用相同的Hashtable,而不是插入Price object MyClass ItemName

答案 4 :(得分:0)

如果您的属性将来可能会再次发生变化,您可以考虑使用Tuple类

http://msdn.microsoft.com/en-us/library/system.tuple.aspx