2013-04-29 79 views
0

我有2個ArrayList,其中包含文件名,現在一個列表有更多的名稱和其他可能有更少的名稱,或在某些時候相等,我想列出在arraylist和因此更新數據庫,我能夠檢查他們是否平等,但我無法列出哪個列表有額外的元素,他們是哪個。ArrayList中所有不常見元素的列表

這是我目前正在使用的代碼。

ArrayList DatabaseSavedThumbnail = objSlideShow.GetAllThumbnailBySlideShowId(); 
     string[] FolderSavedThumbnail = Directory.GetFiles(Server.MapPath("~/Portals/2/SlideShowThumbnails/" + SlideShowName)); 

     if (Directory.GetFiles(Server.MapPath("~/Portals/2/SlideShowThumbnails/" + SlideShowName)).Length > 0) 
     { 
      if (!Object.Equals(DatabaseSavedThumbnail, FolderSavedThumbnail)) 
      { 
       for (int i = 0; i < DatabaseSavedThumbnail.Count && i < FolderSavedThumbnail.Length; i++) 
       { 
        if (!object.Equals(DatabaseSavedThumbnail[i], FolderSavedThumbnail[i])) 
        { 
         if (DatabaseSavedThumbnail.Count > FolderSavedThumbnail.Length) 
         { 
          objSlideShow.Thumbnail = "/Portals/2/SlideShowThumbnails/" + SlideShowName + "/" + Path.GetFileName(DatabaseSavedThumbnail[i].ToString()); 
         } 
         else 
         { 
          objSlideShow.Thumbnail = "/Portals/2/SlideShowThumbnails/" + SlideShowName + "/" + Path.GetFileName(FolderSavedThumbnail[i].ToString()); 
         } 
        } 
        Response.Write(objSlideShow.Thumbnail + "<br>"); 
        /*objSlideShow.SlideTitle = String.Empty; 
        objSlideShow.SlideDescription = string.Empty; 
        objSlideShow.AddSlide();*/ 
       } 
      } 
     } 

但該名單中有多個元素,ArrayList中的所有元素,我只是想差值元素,這樣我可以更新僅這些要素數據庫。

任何人都可以告訴我如何得到差異記錄比較2數組列表。

回答

1

嘗試使用此方法得到的元素兩個列表中並不常見(假設DatabaseSavedThumbnail具有字符串):

using System.Linq; 
... 
... 
var dstArray = DatabaseSavedThumbnail.ToArray(typeof(string)); 
var fstArray = FolderSavedThumbnail; 

var notCommonElements = dstArray.Union(fstArray).Except(dstArray.InterSect(fstArray)); 

一個非常幼稚的迭代方法可以是:

private IEnumerable<string> GetNotCommonElements(string[] array1, string[] array2) 
{ 
    foreach (var item in array1) 
    { 
     if (!array2.Contains(item)) 
     { 
      yield return item; 
     } 
    } 

    foreach (var item in array2) 
    { 
     if (!array1.Contains(item)) 
     { 
      yield return item; 
     } 
    } 
} 

然後使用它像:

foreach(var item in GetNotCommonElements(dstArray, fstArray)) 
{ 
    // Do stuff with item 
} 
+0

非常感謝,這工作就像一個魅力,但正如我在LINQ位毫不我,你能幫助我與正常的如果你不介意的話,實現這個循環的概念。我無法形成邏輯 – Abbas 2013-04-29 04:25:00

+0

偉大..非常簡單和乾淨的方法,我很感激你。你能告訴我什麼是「收益回報項目」嗎?呢? – Abbas 2013-04-29 04:39:25

+0

有一個錯誤。我刪除了代碼。如果較小的列表有一些獨特的項目,這將不起作用。我會在完成我目前的工作後寫下代碼:p – mshsayem 2013-04-29 04:42:14

0

你可以從這裏得到想法

List<int> intersection = first.Cast<int>().Intersect(second.Cast<int>()).ToList(); 

ArrayList intersection = new ArrayList(); 
foreach (var i in first.Cast<int>().Intersect(second.Cast<int>())) 
    intersection.Add(i); 

更多細節
Two ArrayList manipulation