你怎么在数组A中找到它们的mod是数组B的值

时间:2012-02-03 18:28:06

标签: c# linq

我需要最快的方法来找到数组A中的值,当它除以4时,它们的mod是数组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 个答案:

答案 0 :(得分:8)

为什么不:

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

如果B可能很大,则可以创建一个HashSet<int>,但如果它的真的将是mod 4,则没有意义。

或者,假设您知道AB中的每个元素都是正数(并且B没有任何愚蠢的值,例如5),您可以映射{{ 1}}到B并使用bool[4]代替& 3

% 4

答案 1 :(得分: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();

你不需要Where(...)中的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>更有用。