你如何在数组A中找到它们的mod是数组B的值

本文关键字:数组 mod 的值 | 更新日期: 2023-09-27 18:22:20

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

你如何在数组A中找到它们的mod是数组B的值

为什么不:

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

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

或者,假设您知道AB中的每个元素都是正的(并且B没有任何愚蠢的值,如5),则可以将B映射到bool[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();

一点代码回顾:

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();

尽量少用数组。CCD_ 10和CCD_。