C#将数字列表转换为负数

时间:2012-03-16 12:15:37

标签: c# arrays list

如何在一行中将数​​字列表转换为负数? 我也想知道我所做的事情是否正确,是否有人有改进建议。

我正在尝试生成一个给定半径的圆。我使用列表存储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]);
        }
    }

提前致谢

4 个答案:

答案 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;