首页 > 解决方案 > c# foreach 遍历对象并保存浮点数组

问题描述

我是 C# 编程的新手。我搜索了几个小时,但找不到解决方案,或者我不明白如何解决这个问题。我从数据集中反序列化了对象。我的对象具有特定的交易价值,例如开盘高低收盘。我想遍历我的对象并在浮点数组中获取一些值。数组应该看起来像这样 float[] rsi14 ={ 7520.5, 7535.0, 7530.5, ...}

像这样:

deserialziedObjectRsi[0].open + desirializedObjectRsi[1].open + ... to array.

这些值已经来自 float 类型。

我想要这个循环,所以我不必写 50 次或更多。

这是我尝试过的一些代码:

    var deserializedObjectRsi = 
        JsonConvert.DeserializeObject<List<HistoricPricesRsi>>(stochDataRSI);

       List<float> RsiClose = new List<float>();
            RsiClose.Add(deserializedObjectRsi[0].close);
            RsiClose.Add(deserializedObjectRsi[1].close);
            RsiClose.Add(deserializedObjectRsi[2].close);
            RsiClose.Add(deserializedObjectRsi[3].close);
            RsiClose.Add(deserializedObjectRsi[4].close);
            RsiClose.Add(deserializedObjectRsi[5].close);
            RsiClose.Add(deserializedObjectRsi[6].close);
            RsiClose.Add(deserializedObjectRsi[7].close);
            RsiClose.Add(deserializedObjectRsi[8].close);
            RsiClose.Add(deserializedObjectRsi[9].close);
            RsiClose.Add(deserializedObjectRsi[10].close);
            RsiClose.Add(deserializedObjectRsi[11].close);
            RsiClose.Add(deserializedObjectRsi[12].close);
            RsiClose.Add(deserializedObjectRsi[13].close);

            float[] arrRSI14 = RsiClose.ToArray();

标签: c#arraysloops

解决方案


您可以使用LINQ以声明方式为您处理数据。其中会有一个隐含的循环。

var arrRSI14 = deserializedObjectRsi.Select(x => Convert.ToSingle(x.Close)).ToArray();

所做的是,对于 中的每个值(表示为x,但您可以使用任何有意义的名称)deserializedObjectRsi,将其转换为单个值,并将结果放入数组中。关键字使编译器var找出类型是什么;float[]如果你真的想写,你可以写。

在 C# 中,float关键字是 .NET FrameworkSingle类型的别名(有关详细信息,请参阅C# Float 与 VB.net Single - Namin'抱怨'),这就是显示的 .NET Convert 方法使用 ToSingle 而不是 ToFloat 的原因。


我想对所使用的数据类型添加一点说明:对于货币数据来说,Single 或浮点数通常是一个糟糕的选择,因为它的精度足够小,如果在计算中使用它们会很快累积明显的错误。当数字在幕后不近似为二进制分数很重要时,我建议使用 Decimal 类型,例如十进制中的 0.1 是重复出现的二进制分数并且不能精确地表示为 Single 或 Double。

阅读资料:每个计算机科学家都应该知道的关于浮点运算的知识


推荐阅读