gpt4 book ai didi

c# - 按特定顺序排列数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:15 24 4
gpt4 key购买 nike

我有这个整数数组:-

int[] numbers = new int[] { 10, 20, 30, 40 };

我正在尝试创建一个包含第一个元素、最后一个元素、第二个元素、倒数第二个元素等的数组。

因此,我的结果输出将是:-

int[] result = {10,40,20,30};

这是我的方法,在一个循环中从第一个开始到中间,在第二个循环中从最后一个开始到中间并相应地选择项目,但我完全搞砸了。这是我尝试的代码:-

private static IEnumerable<int> OrderedArray(int[] numbers)
{
bool takeFirst = true;
if (takeFirst)
{
takeFirst = false;
for (int i = 0; i < numbers.Length / 2; i++)
{
yield return numbers[i];
}
}
else
{
takeFirst = true;
for (int j = numbers.Length; j < numbers.Length / 2; j--)
{
yield return numbers[j];
}
}
}

需要帮助。

最佳答案

你可以试试这个:

int[] result = numbers.Zip(numbers.Reverse(), (n1,n2) => new[] {n1, n2})
.SelectMany(x =>x)
.Take(numbers.Length)
.ToArray();

说明: 这种方法基本上将原始集合的元素与其反向排序集合的元素配对(使用 Zip)。因此,您会得到一组对,例如 [first, last]、[second, second from last] 等。

然后它将这些成对的集合展平为一个集合(使用 SelectMany)。所以集合变成了 [first, last, second, second from last,...]。

最后,我们将元素的数量限制为原始数组的长度 (n)。由于我们正在迭代两倍的元素(正常和反向),因此迭代 n 元素可以让我们在集合的中间停止。


作为一种不同的方法,这是对您现有方法的修改:

private static IEnumerable<int> OrderedArray(int[] numbers)
{
var count = (numbers.Length + 1) / 2;
for (int i = 0; i < count; i++)
{
yield return numbers[i];

int reverseIdx = numbers.Length - 1 - i;
if(i != reverseIdx)
yield return numbers[reverseIdx];
}
}

关于c# - 按特定顺序排列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27125285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com