gpt4 book ai didi

c# - 无法反转整数数组

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:50 25 4
gpt4 key购买 nike

我目前正在创建一个 Legend 组件,它将文本映射到一个看起来像这样的渐变图例上:

enter image description here

核心代码如下所示(省略了 graphics 声明代码片段,因为那不是主要部分):

        int numberOfItems = 10;
int increment = (int) Math.Round((max - min), 0);
int step = increment / numberOfItems;

步骤存储到大小为10整数数组中的数组。

        int[] legend = new int[numberOfItems];
for (int i = 0; i < legend.Length; i++) {
legend[i] = step * i;
}

字符串反转代码片段

        for (int i = (legend.Length - 1); i >= 0; i--) {
g.DrawString(legend[i].ToString(), drawFontX, Brushes.White, ((newWidth / 2) - 5), (newHeight / 10) + (verticalDistance * i), stringFormatTimes);
}

我也试过:

        legend.Reverse();
for (int i = 0; i < numberOfItems; i++) {
g.DrawString(legend[i].ToString(), drawFontX, Brushes.White, ((newWidth / 2) - 5), (newHeight / 10) + (verticalDistance * i), stringFormatTimes);
}

如您所知,我正在尝试让图形从最大值到最小值呈现文本,而不是它现在所做的,即 0 - 1080。

我的问题是,尽管使用了两种数组反转方法,但我无法反转legend 数组。我不太确定我做错了什么。

最佳答案

legend.Reverse 绑定(bind)到 Enumerable.Reverse,它会返回一个副本。这应该教你不要在不必要的情况下改变状态。相反,从旧数据创建新数据。

var legendContents =
Enumerable.Range(0, numberOfItems)
.Select(i => step * i)
.Reverse()
.Select(i => new { Text = i.ToString(), Y = (newHeight / 10) + (verticalDistance * i) }
.ToArray();

//at this point you can easily examine all draw operations in the debugger

var xPos = ((newWidth / 2) - 5);
foreach (var legendItem in legendContents)
g.DrawString(legendItem.Text, drawFontX, Brushes.White, xPos, legendItem.Y, stringFormatTimes);

使用函数式编程风格。保存了很多代码,现在非常可读并且易于更改。

关于c# - 无法反转整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097057/

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