iT邦幫忙

1

兩個陣列做值的比較,把陣列內不一樣的值挑出來

  • 分享至 

  • xImage

各位好
想請教一個問題,我使用的語法是c#

目前有兩個一唯陣列,陣列a跟陣列b
a、b型態都是string,但我裡面存的都是數字
然後長度都不一樣,a陣列假設有五個值,b陣列假設有4個值
我想比較a跟b的內容,以a為為主找b內的值,把跟a不一樣的挑出來

我目前是寫兩個for迴圈去比較a跟b值的不同…但似乎不能這麼做~~

請問各位前輩這一塊會怎麼去做較為洽當??

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
小魚
iT邦大師 1 級 ‧ 2019-06-01 22:22:31

不能這麼做的原因是什麼?
可以把你的程式碼貼出來嗎?
請貼文字不要貼圖片
最好用兩個```包起來.

1
海綿寶寶
iT邦大神 1 級 ‧ 2019-06-01 23:07:31

實際練習範例

using System;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		string[] a = { "100", "200", "300" , "400" , "500"  };
		string[] b = { "100", "222", "300" , "444"};
		foreach (string str in b)
		{
    		if (a.Contains(str)) {
				Console.WriteLine("Yes-" + str );
			} else {
				Console.WriteLine("No-" + str);
			}
		} // 1 
	}
}
1
攻城屍
iT邦新手 4 級 ‧ 2019-06-02 00:12:37

可以用 Enumerable.Except 來比對兩陣列的差異

範例:https://dotnetfiddle.net/OgEx2w

2
舜~
iT邦高手 1 級 ‧ 2019-06-02 01:49:10

比較a跟b的內容,以a為為主找b內的值,把跟a不一樣的挑出來
=>換個邏輯想,就是以B為主,排除A有出現的,剩下的就是與A不一樣的

可用 Except() 來處理,重複的也一並排除了

double[] B = { 2.0, 2.0, 2.1, 2.2, 2.3, 2.3, 2.4, 2.5 };
double[] A = { 2.2 };

IEnumerable<double> different = B.Except(A);

foreach (double number in different)
    Console.WriteLine(number);

/*
顯示結果:

 2
 2.1
 2.3
 2.4
 2.5
*/
0
PotRookie
iT邦新手 5 級 ‧ 2019-06-02 16:44:20

依照我對題目的理解,其實就是在找出b迴圈裡面,哪些數值是不在a裡面的
如果是我自己的做法,我會另外做一個做一個HashSet去儲存a的值
之後再跑用foreach跑過一次b,去比對HashSet裡面的值

string[] a = { "1", "2", "3", "4", "5" };
string[] b = {"2", "3", "4", "5", "6", "7", "8", "0"};
var a2 = new HashSet<string>(a);

foreach (var val in b)
{
    if (!a2.Contains(val))
    {
        Console.WriteLine(val);
    }
}
//6 7 8 0

我覺得這樣做比較單純,以時間複雜度的角度來講也比跑過雙層迴圈還低

我要發表回答

立即登入回答