C# 无法反转整数数组
我目前正在创建一个图例组件,该组件将文本映射到渐变外观的图例上,如下所示: 中心代码段如下所示(省略C# 无法反转整数数组,c#,arrays,reverse,C#,Arrays,Reverse,我目前正在创建一个图例组件,该组件将文本映射到渐变外观的图例上,如下所示: 中心代码段如下所示(省略图形声明代码段,因为这不是主要代码段): 将步骤存储到整数数组中的数组,大小为10 int[] legend = new int[numberOfItems]; for (int i = 0; i < legend.Length; i++) { legend[i] = step * i; } 我也尝试过:
图形声明代码段,因为这不是主要代码段):
将步骤
存储到整数
数组中的数组,大小为10
int[] legend = new int[numberOfItems];
for (int i = 0; i < legend.Length; i++) {
legend[i] = step * i;
}
我也尝试过:
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);
}
legend.Reverse();
对于(int i=0;i
正如您所知,我正在尝试让图形将文本从最大值渲染到最小值,而不是它现在所做的,即0-1080
我的问题是,尽管使用了两种阵列反转方法,但我无法反转图例
阵列。我不太确定我做错了什么。试试这个:
legend = legend.Reverse().ToArray();
问题是您使用的反向方法不会更改原始对象;它以与原始对象相反的顺序创建一个新对象。但是您没有保存Reverse
方法的结果。只是被忽视了。如果将legend
变量的值重新指定给Reverse
方法的结果,这将解决您的问题
另一种选择是使用列表
:
列表图例=新列表(numberOfItems);
对于(int i=0;i
在这里,您将调用List
类上的Reverse
方法,该方法会更改调用列表的顺序,而不是返回新实例。尝试以下操作:
legend = legend.Reverse().ToArray();
问题是您使用的反向方法不会更改原始对象;它以与原始对象相反的顺序创建一个新对象。但是您没有保存Reverse
方法的结果。只是被忽视了。如果将legend
变量的值重新指定给Reverse
方法的结果,这将解决您的问题
另一种选择是使用列表
:
列表图例=新列表(numberOfItems);
对于(int i=0;i
在这里,您将调用List
类上的Reverse
方法,该方法会更改调用列表的顺序,而不是返回新实例。图例。Reverse
绑定到可枚举。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);
使用函数式编程风格。保存了大量代码,现在可读性很强,易于更改。legend.Reverse
绑定到可枚举。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);
使用函数式编程风格。保存了大量代码,现在可读性很强,易于更改。您错过了作业:
legend = legend.Reverse().ToArray();
你错过了你的作业:
legend = legend.Reverse().ToArray();
您的解决方案和Dan和Dave Bish建议的解决方案有什么好处吗?框架中有多种反向方法。选择哪一个取决于接收器的确切类型。您可能会意外调用列表。例如,反向调用。这是BCL中的一个设计缺陷。对不起,你有没有看我前面问题的代码片段来实现数组reversion=P下面的东西?事实上这很有趣,除非我不在这个笑话中。我还将我的项目命名为xPos和stringFormatTimes。无论如何,谢谢你的帮助!您的解决方案和Dan和Dave Bish建议的解决方案有什么好处吗?框架中有多种反向方法。选择哪一个取决于接收器的确切类型。您可能会意外调用列表。例如,反向调用。这是BCL中的一个设计缺陷。对不起,你有没有看我前面问题的代码片段来实现数组reversion=P下面的东西?事实上这很有趣,除非我不在这个笑话中。我还将我的项目命名为xPos和stringFormatTimes。无论如何,谢谢你的帮助!