【问题标题】:How to displace one array of int values?如何替换一组 int 值?
【发布时间】:2016-08-25 14:08:54
【问题描述】:

我有一个表中有 60 个值的数据库,这些值每分钟自动填充一次。我有一个查询,第一次将采用这 60 个值并填充 ints 的数组。

但是,该方法每分钟都会使用 SignalR 执行,逻辑应该是数组的位置 0 应替换为位置 1,位置 1 应替换为 2,依此类推,最后一个(59!)必须填充使用数据库中的最后一个值。

我不想每分钟都重新创建数组,更不想对每次返回 60 行的数据库进行选择。

我的代码如下

public class Chart_Broadcaster
{
    //The Line Chart Class    
    public class LineChart
    {
        [JsonProperty("lineChartData")]
        private int[] lineChartData;
        [JsonProperty("colorString")]
        private string colorString;

        [JsonProperty("hora")]
        private string[] hora = new string[60];

        public void SetLineChartData()
        {               
            //Suppose we have a list of 60 items.
            using (ZigBeeContext db = new ZigBeeContext())
            {
                var lista = (from p in db.Medidas orderby p.FechaHora descending
                                    select p                             
                             ).Take(60).ToList();

                lineChartData = db.Medidas.Select(p => p.Temperatura).Cast<int>().ToArray();
                hora = db.Medidas.Select(p => p.FechaHora).Cast<string>().ToArray();

            }
        }
    }
}

【问题讨论】:

标签: c# arrays algorithm entity-framework linq


【解决方案1】:

一个不错的方法是使用队列而不是数组。来自MSDN docs

表示对象的先进先出集合

这意味着您只需要将push 新项目放在队列的后面,并将pop 旧项目放在前面。无需担心每次都将物品放置在一个位置,因为这一切都为您处理。

因此,当您获得要添加的新值时,您只需这样做:

//For example (you can't do this but it demonstrates the contents of the queue
var queue = new Queue<int> { 1, 2, 3, 4, 5 } 

var newInt = 6;
queue.Enqueue(newInt);
var oldInt = queue.Dequeue(); //Or don't even bother storing it if you don't want it

另一种时髦的方法是使用 Reactive Extensions for .Net ()。这与 SignalR 作为排队系统配合得很好。

【讨论】:

    【解决方案2】:

    查看Queue class.

    您仍然需要每分钟执行一次 SELECT,因为我假设您每分钟都会有一个新行(如果没有,那么您将必须创建逻辑以仅从数据库中 SELECT 新行)。只需将该行推入内存队列,然后将第一行从队列中取出。

    仅供参考,创建一个长度为 60 的 int 数组是微不足道的,并且每分钟都使用数据库调用来做这件事对我来说是完全可以接受的。

    【讨论】:

    • 您的意思是链接到旧的队列类而不是新的通用版本?
    • @DavidG 很好发现!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多