将A数组中含有的元素并且B数组中没有的输出到一个新的list中

class Program { static void Main(string[] args) { string stringValue = "abcdefg"; int intValue = 10; int intValue2 = 20; double doubleValue = 2.5; List A = new List() { stringValue, intValue, intValue2, intValue2, intValue, doubleValue }; List B = new List() { stringValue, intValue, doubleValue }; Program p = new Program(); List result = p.RemoveDuplicate(A, B); Console.WriteLine(string.Format("Items Count:{0}", result.Count)); Console.Read(); } public List RemoveDuplicate(List A, List B) { if (A == null ||A.Count==0 || B==null || B.Count==0) return A; List ret = new List(); Hashtable ht = new Hashtable(); for (int i = 0; i < B.Count; i++) { if (B[i] != null && !ht.Contains(B[i].GetHashCode())) { ht.Add(B[i].GetHashCode(), B[i]); } } for (int i = 0; i < A.Count; i++) { if (A[i] != null) { if (!ht.Contains(A[i].GetHashCode()) && !ret.Contains(A[i])) { ret.Add(A[i]); } } } return ret; } } 

其实在回答的时候有几个地方需要注意的了,一个是这个题目很简单,但是也就别直接告诉面试官最直接的答案,因为这个可能会显得你非常junior,很明显面试官不是要这样问题问题的。

另外想到hashtable是必然的,而且是最简单最高效的方法,有一个问题是因为数组中放置的是object对象,这样的话就比较tricky,紧张的时候一直在想每个object用什么比较,其实很简单,既然用了hashtable,就用GetHashCode()方法来比较。

一开始想到排序,其实我也知道排序是需要时间的,我只是回避不说而已,但是要知道面试官是很tough而且很smart的,他不说不代表他没考虑到,只是想看看你考虑到了没有,你没说就等于他不认为你考虑到了。

总之不要觉得面试官出了一道简单的题目就好混了,其实他考你的东西是很多的。

你可能感兴趣的:(面试题目)