我正在研究c#,我想知道是否有什么方法可以从一个数组中提取正负数(整数)到另外两个数组,一个包含正数,另一个包含负数
我尝试过类似的事情
.lock()
我必须创建另外两个数组
while(!mutex.tryLock()) {
QEventLoop loop;
loop.processEvents();
}
我想我应该创建一个方法,但是我不知道该怎么做。
答案 0 :(得分:3)
您可以使用LINQ:
var positiveNumbers = numbers.Where(n => n > 0).ToArray();
var negativeNumbers = numbers.Where(n => n < 0).ToArray();
或者另一种方法是计算您有多少个偶数和奇数,创建两个数组,然后填充它们。假设您希望数组的长度正确无误。
// Variables to store counts of positive and negative numbers
int positiveCount = 0;
int negativeCount = 0;
// Because we'll be building new arrays, we need to track our
// position within them, so we create two variables to do that
int positiveIndex = 0;
int negativeIndex = 0;
// loop through once to count the positive and negative numbers
foreach (var number in numbers)
{
if (number > 0)
{
++positiveCount; // same as positiveCount = positiveCount + 1
}
else if (number < 0)
{
++negativeCount;
}
}
// now we know how many +ve and -ve numbers we have,
// we can create arrays to store them
var positiveNumbers = new int[positiveCount];
var negativeNumbers = new int[negativeCount];
// loop through and populate our new arrays
foreach (var number in numbers)
{
if (number > 0)
{
positiveNumbers[positiveIndex++] = number;
// number++ will return the value of number before it was incremented,
// so it will first access positiveNumbers[0] and then positiveNumbers[1], etc.
// each time we enter this code block.
}
else if (number < 0)
{
negativeNumbers[negativeIndex++] = number;
}
}
初始计数的另一种方法是将两个数组定义为与numbers
数组相同的长度,然后使用positiveIndex
和negativeIndex
确定最大填充索引在positiveNumbers
和negativeNumbers
数组中。不利之处在于,它使用了更多的内存(但是对于这么小的集合而言,内存是便宜的),不利之处在于,您只需要循环一次即可,从而提高性能。
如果您的情况允许,使用通用列表可能会更容易:
var positiveNumbers = new List<int>();
var negativeNumbers = new List<int>();
foreach (var number in numbers)
{
if (number > 0)
{
positiveNumbers.Add(number);
}
else if (number < 0)
{
negativeNumbers.Add(number);
}
}
泛型列表基本上是内部数组周围的精美包装器。该列表以相对较小的数组开始。将项目添加到列表中时,会生成更多的数组来存储所有项目。您可以通过查看列表的.Capacity
属性来查看内部数组的当前总体大小。不要将Capacity
与Count
混淆。 Count
显示列表中实际存在的项目数,而Capacity
显示列表在扩展之前可以容纳的项目数。
请注意,在这些答案中,零将被排除,因为您只要求输入正数和负数,而零都不是。如Max Play的评论所强调,如果您认为零为正数,则应将>
更改为>=
。
答案 1 :(得分:0)
假设您将0视为正数,则添加一种方法来检查正数。
private static bool isNegtive(int number)
{
return number < 0;
}
我会使用数组列表来表示未知数量。它会像这样:
public static void SeparateRandomNumbers()
{
IList<int> positive_numbers = new List<int>();
IList<int> negative_numbers = new List<int>();
Random objeto = new Random();
for (int i = 0; i < 50; i++)
{
var number = objeto.Next(-50, 50);
if (isNegtive(number))
{
negative_numbers.Add(number);
}
else
{
positive_numbers.Add(number);
}
}
}