2012-02-03 56 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>更有用。

相关问题