我如何在适合条件的阵列中找到一系列数字?

时间:2016-11-24 20:01:46

标签: c#

我试图更好地理解数组,并且我在这个网站上发现这段代码用一堆随机数填充数组。我想知道如何提取一系列数字。因此,如果我想知道数组中有多少这些随机数,在25到50之间,我将如何做到这一点?我听说过Array.FindAll<>但是我不知道如何使用它。 提前谢谢。

Random r = new Random();

int count = 100;
// Create an array with count elements.
int[] numbers = new int[count];

// Loop over each index
for (int i = 0; i < count; i++)
{
    // Generate and store a random number at current index
    numbers[i] = r.Next(1, 100);
}

4 个答案:

答案 0 :(得分:0)

使用LINQ,您可以尝试以下方法:

var numbersInRange = numbers.Where(number => number > 25 && number < 60)
                            .ToArray();

以上内容将过滤掉(25,60)范围内的所有数字。如果您还想获得等于25或60的数字,则必须使用>=<=

如果您不想使用LINQ(我无法解释),您可以尝试以下方法:

var numbersInRange = new List<int>();
foreach(var number in numbers)
{
    if(number > 25 && number < 60)
    {
        numbersInRange.Add(number);
    }
}

所以最后你会有一个包含你的号码的列表。

将此与LINQ版本相比,我认为LINQ是简单性和可读性的赢家。

答案 1 :(得分:0)

使用Linq它是一行

int[] inRange = numbers.Where(x => x >= 25 && x <= 50).ToArray();

Enumerable methods是对值序列进行操作的方法的集合,并将谓词表达式(x =>&amp;&amp; x&lt; = 50)应用于序列的每个成员(x) (数字)。在您的特定情况下,Where method根据布尔表达式的结果过滤序列(返回包括表达式返回true的成员)。

答案 2 :(得分:0)

我们可以使用Linq。首先在命名空间中有using System.Linq,因此可以使用扩展方法。

查找数字:

numbers.Where(x => x >= 25 & x <= 50)

这需要一个lambda表达式(在本例中为x => x >= 25 & x <= 50),它接受序列中类型的对象(在这种情况下为int)返回bool,然后计算该表达式对于所有包含的项目,过滤掉那些不包含的项目。

您可以在结果上使用ToArray()将其恢复为数组,或直接处理结果。

要获得哪些数字,也就是说,匹配所在的哪个指数,您可以使用:

numbers.Select((x, i) => new {El = x, Idx = i}).Where(x => x.EL >= 25 & x.El <= 50).Select(x => x.Idx)

首先为每个项目创建一个新的匿名对象,其中El是保留的值,Idx是它所在的索引。然后它执行与之前相同的Where,但是在我们在第一步中创建的对象的El属性上。最后,它提取出幸存者的Idx属性,因此我们拥有所有匹配的索引。

答案 3 :(得分:0)

虽然“Linq”可以完成其他答案所示的工作;正如你所听到的,还有Array.FindAll行为相同但已经返回一个数组(因此不需要调用ToArray

int[] matchedNumbers = Array.FindAll (currentNumber => 25 <= currentNumber && currentNumber <= 50);

至于“奇怪的”箭头符号,它是lambda expression