假設您有以下陣列:在C#中的數組記錄重複信息
int[] x = new int[6] {2,4,6,8,10,12};
int[] y = new int[6] {3,6,9,12,15,18};
如果你想打印的數組是相同的,6和12在這個例子中的值,這將是在C#中這樣做的最有效方法?與其他數據類型比如字符串或布爾值是否會有所不同?
假設您有以下陣列:在C#中的數組記錄重複信息
int[] x = new int[6] {2,4,6,8,10,12};
int[] y = new int[6] {3,6,9,12,15,18};
如果你想打印的數組是相同的,6和12在這個例子中的值,這將是在C#中這樣做的最有效方法?與其他數據類型比如字符串或布爾值是否會有所不同?
您可以使用下面的代碼來找到匹配的元素
int[] x = new int[6] { 2, 4, 6, 8, 10, 12 };
int[] y = new int[6] { 3, 6, 9, 12, 15, 18 };
foreach (int i in x)
{
if (y.Contains(i))
{
Console.WriteLine(i);//Print Matched items
}
}
只要數據類型是在兩個數組相同它將很好地工作。 希望這可以幫助你。
標記的答案是O(n * m)
,當n = m時爲O(n^2)
。使用其中一個數組的內容創建哈希集,然後檢查另一個數組中的哈希集中的項是O(n + m)
,當n = m時爲O(n)
。這樣做一方面需要額外分配O(n)
存儲空間,另一方面需要在宇宙結束之前完成,當n很大時。對於有六個元素的陣列,任何解決方案都可以工作對於六百萬的陣列,標記的答案不會。這兩組代碼都很簡單。
實現可以在兩行中完成。
var hashSet = new HashSet<int>(x);
var inBoth = y.Where(t => hashSet.Contains(t));
下面是一個完整的程序,證明爲何O(n^2)
的解決方案是爲inadequite問題任何真正的大小。如果你想讓自己相信這兩個實現能夠正常工作,那麼將totalItems
的大小減小到〜100,000,並且它會在合理的時間內完成。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
public class Solution
{
static void Main()
{
const int totalItems = 1000000;
var rng = new Random();
var foo = Enumerable.Range(0, totalItems).Select(x => rng.Next(1, totalItems/2)).ToArray();
var bar = Enumerable.Range(0, totalItems).Select(x => rng.Next(1, totalItems/2)).ToArray();
var sw = new Stopwatch();
sw.Start();
var foobar = new HashSet<int>(foo);
var inBoth = bar.Count(t => foobar.Contains(t));
sw.Stop();
Console.WriteLine(sw.Elapsed + " " + inBoth);
sw.Reset();
sw.Start();
inBoth = bar.Count(t => foo.Contains(t));
sw.Stop();
Console.WriteLine(sw.Elapsed + " " + inBoth);
Console.ReadKey();
}
}
定義「高效」。 –
獲取必要的任務,以最少的行數完成所需的任務,並獲得所需的最低信息。 – UnknownM1