none
如何讓 兩的陣列 比較 傳回不同的值 RRS feed

  • 問題

  • 我有兩個字串的陣列 兩個陣列的內容會變動

    EX:

    a1  = {201,202,203,204,205};

    a2 = {202,203}

    兩個陣列不同的值為 201 204 205 

     

    我要怎麼做才能傳回這三個值呢.....囧

     

    2010年12月4日 下午 12:08

解答

  • 您好,

    如果您是要做集合的差運算,建議可以用.Net Framework 3.5 提供的新的集合類別 HashSet。
    項目多的時候,效率會比List的Contains或Remove好很多。

      HashSet<string> set = new HashSet<string>(a1);
      set.ExceptWith(a2);
      return set.ToArray();
    

    2010年12月10日 上午 08:28
  • 其中一種作法:

    先將 a1 轉成List (Of T)

    應用 List< (Of < ( T > ) > ) . . :: . Remove 方法 移除元素

    再用 List< (Of < ( T > ) > ) . . :: . ToArray 方法 轉回結果陣列


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年12月4日 下午 01:40
    版主
  • dear
    提供一個方法Except(),請參考以下,
    http://www.dotblogs.com.tw/yc421206/archive/2010/09/22/17859.aspx
    http://msdn.microsoft.com/zh-tw/library/system.linq.enumerable.except.aspx

    或是你自己寫演算法,把陣列的值都挑出來比較。
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月4日 下午 05:51
  • 用LINQ還蠻方便的:

    foreach (int num in a1) 
    { 
     
    if (!a2.Contains(num)) a2.Add(num); 
    } 
     
    int[] uniquearray = a2.ToArray(); 

    2010年12月5日 上午 01:52
  • ... 字串... 那要是 a2={203, 202} 要怎麼辦?

    你的邏輯看起來應該是另一集合中不存在的值,而不是不同的值。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月5日 上午 03:55
  • 可以透過LINQ來做到

    var distinctObj = a1.Where( str => a2.Contains( str ) != true );

    這樣就行啦!!


    Ouch Liu
    2010年12月6日 上午 11:01

所有回覆

  • 其中一種作法:

    先將 a1 轉成List (Of T)

    應用 List< (Of < ( T > ) > ) . . :: . Remove 方法 移除元素

    再用 List< (Of < ( T > ) > ) . . :: . ToArray 方法 轉回結果陣列


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年12月4日 下午 01:40
    版主
  • dear
    提供一個方法Except(),請參考以下,
    http://www.dotblogs.com.tw/yc421206/archive/2010/09/22/17859.aspx
    http://msdn.microsoft.com/zh-tw/library/system.linq.enumerable.except.aspx

    或是你自己寫演算法,把陣列的值都挑出來比較。
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月4日 下午 05:51
  • 用LINQ還蠻方便的:

    foreach (int num in a1) 
    { 
     
    if (!a2.Contains(num)) a2.Add(num); 
    } 
     
    int[] uniquearray = a2.ToArray(); 

    2010年12月5日 上午 01:52
  • ... 字串... 那要是 a2={203, 202} 要怎麼辦?

    你的邏輯看起來應該是另一集合中不存在的值,而不是不同的值。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月5日 上午 03:55
  • 對....囧  應該是 不存在的值...

    實在不是很會解釋...

    2010年12月5日 上午 04:14
  • 可以透過LINQ來做到

    var distinctObj = a1.Where( str => a2.Contains( str ) != true );

    這樣就行啦!!


    Ouch Liu
    2010年12月6日 上午 11:01
  • 您好,

    如果您是要做集合的差運算,建議可以用.Net Framework 3.5 提供的新的集合類別 HashSet。
    項目多的時候,效率會比List的Contains或Remove好很多。

      HashSet<string> set = new HashSet<string>(a1);
      set.ExceptWith(a2);
      return set.ToArray();
    

    2010年12月10日 上午 08:28