拆分字符串数组并在列表或字典中存储键值对

时间:2016-12-16 06:42:44

标签: c# .net cookies

如何使用分割产品数组字符串,并在字典或列表中保存键值对。 cookie中的字符串是:

cookieValue ="12&150&pid=1,name=abc,size=2gm    Sachet,price=50,image=Pouch.jpg,quantity=1&pid=2,name=xyz,size=200gm   Packet,price=50,image=small.jpg,quantity=2" 

产品数组如下:

[0] "12"
[1] "150"
[2] "pid=1,name=abc,size=2gm Sachet,price=50,image=Pouch.jpg,quantity=1"
[3] "pid=2,name=xyz,size=200gm    Packet,price=50,image=small.jpg,quantity=2"

处理cookie的代码:

if(HttpContext.Request.Cookies["Cart"]!= null)
{
  var cookieValue = Request.Cookies["Cart"].Value;

  string[] products = cookieValue.Split('&');

  var len = products.Length;                             
  for(int x=2;x<=len;x++)
  {
     string s1 = products[x];
  }
}

2 个答案:

答案 0 :(得分:0)

在您的示例中,将输入字符串拆分为&amp;生成一个包含4个元素的数组,因此假设此数组的前半部分表示要跳过的内容,后半部分是产品本身,其中 pid 字段用作KeyValuePair的键结构,您可以用这种方式在Dictionary<int, Product>中转换该字符串

public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public string Size {get;set;}
    public decimal Price {get;set;}
    public string Image {get;set;}
    public int Quantity {get;set;}
}

Dictionary<int, Product> dicProducts = new Dictionary<int, Product>();
string[] products = cookieValue.Split('&');
var len = products.Length;                             
int half = len / 2;
for(int x=half;x<len;x++)
{
    string[] productData = products[x].Split(',');
    Product p = new Product()
    {

        ID = Convert.ToInt32(productData[0]);
        Name = productData[1];
        Size = productData[2];
        Price = Convert.ToDecimal(productData[3]);
        Image = productData[4];
        Quantity = Convert.ToInt32(productData[5]);
    }
    dicProducts.Add(p.ID, p);
}

这是一个非常简单的代码来遍历输入数据,我没有对输入数据进行任何检查,以免使代码过于复杂。在现实世界的应用程序场景中,您应该添加大量检查。例如,输入数据应该完全被2整除,应检查产品部分中的字符串的完整性和有效性。

答案 1 :(得分:0)

希望这有帮助。

您不能使用字典,因为有重复的键。但是你可以使用List of KeyValuePairs。

        var products = cookieValue.Split('&');

        var keyValueList = new List<KeyValuePair<string, string>>();

        foreach (var product in products)
        {
            var sequence = product.Split(',').ToList();
            var isValidSequence = sequence.Count > 1;
            if (!isValidSequence) continue;

            sequence.ForEach(s =>
                    keyValueList.Add(new KeyValuePair<string, string>(s.Split('=')[0], s.Split('=')[1]))
            );
        }