如何在一行中将数字列表转换为负数? 我也想知道我所做的事情是否正确,是否有人有改进建议。
我正在尝试生成一个给定半径的圆。我使用列表存储x和y,所以不完全确定这是否是最好的方法。以下评论是我想要负数的地方。
private static void Generate_Circle(double x0, double y0, double radius)
{
double y, r2;
double x;
r2 = (radius * radius);
List<double> xList = new List<double>();
List<double> yList = new List<double>();
for (x = -radius; x <= radius; x += radius / 10)
{
y = Math.Sqrt(r2 - x * x);
xList.Add(x);
yList.Add(y);
}
List<double> xxList = new List<double>();
xxList.AddRange(xList);
xList.Reverse();
xxList.AddRange(xList);
List<double> yyList = new List<double>();
yyList.AddRange(yList); // This should be converted to negative values
yList.Reverse();
yyList.AddRange(yList);
for (int i = 0; i < xxList.Count; i++) // Loop through List with for
{
Console.WriteLine(xxList[i] + " " + yyList[i]);
}
}
提前致谢
答案 0 :(得分:3)
尝试:
List<double> reversed = yList.Select(x => -x).ToList();
答案 1 :(得分:1)
Foreach(int x in list){x = -x};
答案 2 :(得分:1)
使用Select
扩展名对每个值进行计算。当你说“转换为否定”时,我假设所有值都是正值,这样你就可以简单地改变符号:
yyList.AddRange(yList.Select(n => -n));
复制和反转值的替代方法是只使用两次值,然后您根本不必创建第二组列表:
for (int i = 0; i < xList.Count; i++) {
Console.WriteLine(xList[i] + " " + yList[i]);
}
for (int i = xList.Count - 1; i >= 0; i--) {
Console.WriteLine(xList[i] + " " + (-yList[i]));
}
但是,开始计算列表是错误的。使用平方根不会给出圆形曲线。你需要使用鼻窦和余弦。
for (double r = 0; r < Math.PI; r += Math.PI / 20) {
xList.Add(Math.Cos(r) * radius);
yList.Add(Math.Sin(r) * radius);
}
答案 3 :(得分:1)
您可以使用Linq并将行替换为;
yyList.AddRange(yList.Select(num => -num));
请注意,如果您还没有Linq,则必须添加using
子句;
using System.Linq;