最近看到這個題目,程式碼如下
public void Run()
{
Random seed = new Random();
int[] itemsA = new int[20000];
int[] itemsB = new int[20000];
for (int i = 0; i < 20000; i++)
{
itemsA[i] = seed.Next(10000);
itemsB[i] = seed.Next(10000);
}
DateTime now = DateTime.Now;
Console.WriteLine("同時出現在2個陣列的數字有 {0} 筆, 費時 {1:0.00}秒",
GetSameValues(itemsA, itemsB).Length, (DateTime.Now - now).TotalSeconds);
}
public int[] GetSameValues(int[] itemsA, int[] itemsB)
{
//請實作
throw new NotImplementedException();
}
我目前想到這一步後面暫時沒想法
for(int i = 0; i < itemsA.Length; i++)
{
for (int j = 0; j < itemsB.Length; j++)
{
if(itemsA[i] == itemsB[j])
{
}
}
}
不知道這個該如何解?
更新
大概是這樣寫
public static int[] GetSameValues(int[] itemsA, int[] itemsB)
{
var intersect = itemsA.Intersect(itemsB);
int[] result = new int[0];
foreach (int id in intersect)
{
result = new int[id];
}
return result;
}
感謝解答
可以先把一個array的東西一個個用loop存到hash map,再從hash map中找
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
(new Program()).Run();
}
public void Run()
{
Random seed = new Random();
int[] itemsA = new int[20000];
int[] itemsB = new int[20000];
for (int i = 0; i < 20000; i++)
{
itemsA[i] = seed.Next(10000);
itemsB[i] = seed.Next(10000);
}
DateTime now = DateTime.Now;
Console.WriteLine("同時出現在2個陣列的數字有 {0} 筆, 費時 {1:0.00}秒",
GetSameValues(itemsA, itemsB).Length, (DateTime.Now - now).TotalSeconds);
}
public int[] GetSameValues(int[] itemsA, int[] itemsB)
{
IEnumerable<int> intersect = itemsA.Intersect(itemsB);
return intersect.ToArray();
}
}
tenno081 如果你想要自己實作的話
public int[] GetSameValues(int[] itemsA, int[] itemsB)
{
List<int> result = new List<int>();
HashSet<int> temp = new HashSet<int>();
foreach (int i in itemsB) {
temp.Add(i);
}
foreach (int i in itemsA) {
if (temp.Remove(i)) {
result.Add(i);
}
}
return result.ToArray();
}
大概是這樣子,鮮少寫 C# ,就參考著用吧
有幫助到你麻煩給個最佳解答
感謝,可是我太早給了,真的很抱歉QQ
沒事