2016-12-16 135 views
1

如何使用拆分产品数组字符串,并将键值对保存在字典或列表中。串在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]; 
    } 
} 
+0

什么是_Key_ = 12的_Value_部分? – Steve

+0

Dictionary keyValuePairs = s1.Split(','); – shweta

+0

我只是想把第二和第三个数组的值字符串分开使用(,) – shweta

回答

0

希望这会有所帮助。

您不能使用字典,因为有重复的键。但是你可以使用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])) 
      ); 
     } 
+0

是的,我做了同样的方式..... thanku – shweta

0

在您的例子,分割输入串在&产生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,应该检查产品部分中找到的字符串的完整性和有效性。

+0

上半年不是关键 – shweta

+0

pid = 1,name = abc,size = 2gm Sachet,price = 50,image = Pouch.jpg,quantity = 1 – shweta

+0

那么关键是pid? – Steve