2013-10-29 53 views
0

我通過網絡API使用此代碼正從一個CSV文件的項目清單:獲取CSV列第一個值沒有重複

private List<Item> items = new List<Item>(); 

     public ItemRepository() 
     { 
      string filename = HttpRuntime.AppDomainAppPath + "App_Data\\items.csv"; 

      var lines = File.ReadAllLines(filename).Skip(1).ToList(); 

      for (int i = 0; i < lines.Count; i++) 
      { 
       var line = lines[i]; 

       var columns = line.Split('$'); 

       //get rid of newline characters in the middle of data lines 
       while (columns.Length < 9) 
       { 
        i += 1; 
        line = line.Replace("\n", " ") + lines[i]; 
        columns = line.Split('$'); 
       } 

       //Remove Starting and Trailing open quotes from fields 
       columns = columns.Select(c => { if (string.IsNullOrEmpty(c) == false) { return c.Substring(1, c.Length - 2); } return string.Empty; }).ToArray(); 


       var temp = columns[5].Split('|', '>'); 
       items.Add(new Item() 
       { 
        Id = int.Parse(columns[0]), 
        Name = temp[0], 
        Description = columns[2], 

        Photo = columns[7] 



       }); 
      } 
     } 

項目列表的名稱屬性必須來自列,其結構如下:

Groups>Subgroup>item

因此我使用var temp = columns[5].Split('|', '>');在我的代碼「>」之前得到該列的第一個元素,其中在上述情況中是羣組。這工作正常。

但是,我在結果中得到很多重複。這是因爲,在列的其他項目可能是:

(這些都是一些項目在我的CSV列9) Groups>Subgroup2>item2Groups>Subgroup3>item4Groups>Subgroup4>item9

全部開始Groups,但我只想要得到Groups一旦。

因爲它是我得到一長串Groups。我如何停止重複?

我希望如果列表中的項目與Name「組」一起返回,則不會返回具有該名稱的其他項目。我如何進行檢查並實施?

回答

1

如果你成功地獲得團體的名單,採取組的列表並且使用LINQ:

var undupedList = dupedList 
    .Distinct(); 

更新:之所以明顯沒有工作是因爲你的代碼要求不只是名稱,也,說明等...如果你只要求名稱,Distinct()就可以工作。

更新2:試試這個:

//Check whether already exists 
if((var match = items.Where(q=>q.Name == temp[0])).Count==0) 
{ 
    items.add(...); 
} 
0

如何使用列表存儲Item.Name? 然後在調用items.Add()前檢查List.Contains()

簡單,只有3行代碼,它的工作原理。

IList<string> listNames = new List(); 
// 
for (int i = 0; i < lines.Count; i++) 
{ 
    // 
    var temp = columns[5].Split('|', '>'); 
    if (!listNames.Contains(temp[0])) 
    { 
     listNames.Add(temp[0]); 
     items.Add(new Item() 
     { 
      // 
     }); 
    } 
} 
相關問題