[英]How to compare elements in an array in C#?
我會給你一個我想做的事的例子。 如果我們有輸入:
1 4 3 2
我要打印所有 大 於其右邊所有元素的數字 。 在這里,我們必須打印4、3和2 。 我已經將輸入轉換為數組,但是我不知道如何比較元素。
int[] numbers = Console.ReadLine()
.Split()
.Select(int.Parse)
.ToArray();
您可以檢查當前元素是否為array的右切片的最大值:
int[] numbers = new int[]{ 1, 4 ,3 ,2 };
var result=numbers.Where((number, i) => number == numbers.Skip(i).Max()).ToList();
輸出:
4,3,2
您可以使用LINQ來做到這一點,如下所示:
var numbers = new[] { 1, 4, 3, 2 };
var query =
from info in numbers.Select((n, i) => (n, i))
where numbers.Skip(info.i + 1).All(value => info.n > value)
select info.n;
它的工作方式是:
// Iterate over the numbers, keeping track of the index of each one
from info in numbers.Select((n, i) => (n, i))
// For each item, make sure it's greater than the ones on its right
where numbers.Skip(info.i + 1).All(value => info.n > value)
// If that's the case, select that item
select info.n;
```
int[] numbers = Console.ReadLine()
.Split()
.Select(int.Parse)
.ToArray();
string[] topIntegers = new string[numbers.Length];
int maximumValue = int.MinValue;
int j = 0;
for (int i = numbers.Length - 1; i >= 0; i--)
{
if (numbers[i] > maximumValue)
{
maximumValue = numbers[i];
topIntegers[j] = maximumValue.ToString();
}
j++;
}
for (int i = topIntegers.Length - 1; i >= 0; i--)
{
Console.Write($"{topIntegers[i]} ");
}
我以這種方式做到了,但是在此測試中我得到了不正確的結果:
14 24 3 19 15 17我的輸出是:
24 19 17但預期是:
24 19 17
您可以使用Aggregate執行此操作:
int[] allNumbers = new int[] { 1, 4, 3, 2 };
int[] filteredNumbers = allNumbers.Aggregate(new List<int>(), (result, x) => {
var filteredResult = new List<int>(result.Where(y => y > x));
filteredResult.Add(x);
return filteredResult;
}).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.