2012-02-03 27 views
1

我需要找到數組A的值,他們的MODS是B陣列時,除以4最快的方法:你如何找到在數組A中的值,他們的MODS是B陣列

A = {4,5,6,7,8,9,10} 

B={2,3} 

result={6,7,10} 

礦:

foreach (int b in B) 
     { 
     S= A.Where(n => n % 4 == b).ToArray(); 

     foreach (int s in S) 
     { 
      newlist.Add(s); 

     } 
     } 
    newlist.Distinct().ToArray(); 
+2

問題是什麼? – 2012-02-03 18:29:21

+0

你是什麼意思'最快的方式'? – FGhilardi 2012-02-03 18:33:05

回答

8

爲什麼不:

var query = A.Where(a => B.Contains(a % 4)) 
      .ToArray(); 

如果B可能會很大,你可以創建一個HashSet<int>代替,b如果它是真的將是模4,沒有意義。

或者,假設你知道,在AB每個元素是正的(和B沒有任何愚蠢的值,比如5),可以映射Bbool[4]和使用& 3代替% 4

var truth = new bool[4]; 
foreach (var b in B) 
{ 
    truth[b] = true; 
} 
var query = A.Where(a => truth[a & 3]).ToArray(); 
+0

擊敗我! – msmucker0527 2012-02-03 18:32:29

+0

你必須確定'B'中的所有值都是肯定的。不管讀寫是什麼,如果你嘗試訪問他們的'-1'元素,數組不喜歡它。 – Nuffin 2012-02-03 19:05:15

+0

@Tobias:真的 - 爲了清晰我會編輯:) – 2012-02-03 19:14:44

1

一些代碼審查:

foreach (int b in B) 
    { 
    S= A.Where(n => n % 4 == b).ToArray(); 

    foreach (int s in S) 
    { 
     newlist.Add(s); 

    } 
    } 
newlist.Distinct().ToArray(); 

你不需要ToArray的()在(...)ToArray的()。
而foreach循環可以與被的AddRange替換()

foreach (int b in B) 
    { 
     var S = A.Where(n => n % 4 == b); 
     newlist.AddRange(S); 
    } 
    var result = newlist.Distinct().ToList(); 

儘量少用陣列。 List<T>IEnumerable<T>更有用。

相關問題