我试图更好地理解数组,并且我在这个网站上发现这段代码用一堆随机数填充数组。我想知道如何提取一系列数字。因此,如果我想知道数组中有多少这些随机数,在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);
}
答案 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