小编Fir*_*DoL的帖子

实现Undo/Redo的好收藏?

我正在阅读撤消/重做技术,我明白应该如何实现(我发现它很直观).

但是我正在考虑应该用作历史的集合,

很多人使用堆栈,但C#堆栈实现为数组,这是一个问题:如果我使用"有限"历史记录(例如,对于2000命令),当达到限制时我没有从堆栈末尾删除项目的方法,如果我找到了一种方法,我必须移动数组的所有元素(这是每次命令完成时).

LinkedList看起来不错,但它浪费了大量内存.

我的最后一个选项是链表的自定义实现,SingleLinkedList.此列表的一个节点由Value属性和NextNode指针属性组成,因此我为每个项目使用双重内存(但除此之外,除非我使用的内容小于"sizeof(void*)").

我还存储了指向第一个元素的指针和指向集合中最后一个元素的指针.

我可以轻松地将命令添加到历史记录中并以这种方式将它们移动到重做历史,但是我无法创建"有限"历史记录,因为不允许使用RemoveLast(我必须通过整个集合来删除最后一项).

所以我的问题是:我应该使用LinkedList还是我的自定义SingleLinkedList?

更新1:

感谢您的回答,在我的情况下,我没有内存问题,好吧,我不知道我的目标是谁,我正在创建一个实用程序,并且在我自己的"实用程序"的想法中,他们应该浪费最少的CPU /内存(显然不要告诉我"用c ++写它",因为有很大的区别).

在我看来,单链接列表效果很好,我真的不想限制历史,我在考虑你的历史是"无限"的Photoshop.

我只担心撤消历史变得非常大时会发生什么,比如使用8小时.这就是我考虑通过LinkedList限制它的原因.

然而,正如其他人所说,如果我将链表限制在一个大的大小,大约60000个命令(我认为它们应该足够),我只会浪费少量内存,(4个字节*60000)与singlelinkedlist相比.

也就是说,我想我会使用LinkedList,但只是为了确定,如果我使用无限制的历史记录会没问题吗?

更新2:

@Akash Kava嗯,你说它很重要,但你误解为什么我想使用LinkedList以及为什么我不想使用堆栈.Stack的主要问题是必须限制它的大小,并且当达到这个限制时,没有一种快速的方法来删除旧的命令(它是一个数组,并且每当它不是我们想要的东西时它的尺寸加倍).

单个链表(考虑它是如何构建的)作为堆栈是快速的(所有堆栈操作都是O(1))并且没有限制.但是在这种情况下,它不需要有限制,否则我们遇到与堆栈相同的问题,我们没有快速的方法来删除我们的singlelinkedlist的最后一个元素(它的行为就像一个堆栈),因为我们不知道我们上一个节点的前一个节点元素.

在这种情况下,考虑一个LinkedList,你可以很容易地使用Previous指针.然而,我们为"Stack"的每个元素使用了2个额外的指针(这次是通过链表制作的),这就像使用3倍于存储命令所需的内存(使用数组我们有正常的内存)用法,singlelinkedlist有2倍的内存使用量,链表有3倍的内存使用量).

所以我基本上要问的是哪个是"最佳"集合来实现undo-redo模式的堆栈.

你的回答让我觉得,即使我在一个程序中创建60000命令,它在一个程序中大约是5MB的内存,这不是那么多.

基本上,如果要限制撤消/重做历史记录,则需要使用LinkedList,否则SingleLinkedList会更好.

c# collections linked-list undo-redo

5
推荐指数
1
解决办法
3410
查看次数

C#:哪个是已经可序列化的集合(我的意思是,从microsoft创建)

我需要序列化一个集合,但我想知道是否有任何已经可序列化的集合,然后从第三部分获取代码或者自己编写代码.我已经实现了一些可序列化的集合,但这是一个愚蠢的情况,我只需要将一系列可序列化的类传递给剪贴板并从中返回(复制/粘贴).

关于我应该使用什么的任何建议?

c# collections serialization

5
推荐指数
1
解决办法
4773
查看次数

Tftp协议实现和netascii和octect之间的区别

我正在构建一个应用程序,它是一个实现tftp协议的服务器.我很难理解tftp中ASCII格式和二进制格式(netascii和octect)之间的区别,以及如何以协议状态不同地读取文件.

我知道ASCII字符可以用单个字节表示.所以我不明白读取ascii模式(每个字符1个字节)和二进制模式(1个原始字节)之间的区别.

我可以使用标志ios :: binary获取二进制模式(在tftp中为octet)而没有ascii(nettscii在tftp中)的文件,但是我真的不明白在这两种方式中读取文件的区别是什么(我总是想出一个字节数组).

如果有人能帮助我理解,我会非常感激

tftp协议规范:http://www.rfc-editor.org/rfc/rfc1350.txt

我不明白的部分就是这个:

目前支持三种传输模式:netascii(这是"美国信息交换标准代码"
[1]中定义的ascii,具有"Telnet协议
规范"[3]中指定的修改.)请注意,它是8位ascii.
本文档中将使用术语"netascii"来表示
ascii的这个特定版本.); octet(这取代了本文档先前版本的"二进制"模式.)原始8位字节; mail,
netascii字符发送给用户而不是文件.(邮件
模式已过时,不应实现或使用.)其他
模式可由成对的协作主机定义.

c++ protocols tftp

5
推荐指数
1
解决办法
4115
查看次数

在另一个苗条文件中包含一个苗条文件

我正在开发一个静态网站(所以没有真正的服务器支持),我想在另一个网站中包含一个小的细长片段,可能会将变量传递给它.

这可能吗?在rails中很容易,虽然render方法,但我不知道如何在苗条上做(显然load方法不适用于苗条).

ruby static-html slim-lang

5
推荐指数
2
解决办法
6373
查看次数

如何使固定尺寸的主体(或div)始终位于页面的中心(甚至垂直!)

我试图让一个1024x768的机身始终保持在页面的中心(上下相同的间距,左右也是如此)但是我在做这件事时遇到了麻烦.

我使用距离顶部间距50%的技巧,然后我(绝对)将身体定位在-384px,这是768的一半.

然而这个方法给我一个问题:如果你的窗口小于768px,你会得到一个滚动条,但是身体上部的一部分被切断,没有任何向上滚动的可能性(我仍然可以向下滚动).

怎么解决?

编辑1: 这是一些代码:

可以在简单的html网页上打印的Html代码:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
<style>
/**
 *     Change the basic background color of the page
 */
html
{
    background-color: blue;
}

/**
 *     Set the body as a 1024 x 768 rectangle in center of the screen
 */
body
{
    background-color:                   red;
    font-family:      TradeGothic, sans-serif;
    margin-left:                       -512px;
    margin-top:                        -384px;
    position:                        absolute;
    height:                             768px;
    width:                             1024px;
    left:                                 50%;
    top:                                  50%;
}
</style> …
Run Code Online (Sandbox Code Playgroud)

html css

4
推荐指数
1
解决办法
5万
查看次数

存储在启用autoSync同步后执行某些操作

我正在尝试检测并删除那些在同步后仍在商店但未添加到数据库但未添加到数据库的字段(成功:false).然后,向用户返回一条错误消息(带有一些错误代码).但是我只能在商店文档中看到"beforesync"事件.

有没有可能做这样的事情?我正在尝试"更新"事件,但只有在同步成功时才会在同步后调用它们(否则它们仅在同步之前被调用).

我无法找到同步后触发的事件.对此有何解决方案?

请注意,我正在使用autoSync,这就是为什么我无法挂钩回调,否则一切都会变得更容易.

我在文档中看到的另一个重点是:

码:

Ext.data.Model.EDIT
Ext.data.Model.REJECT
Ext.data.Model.COMMIT
Run Code Online (Sandbox Code Playgroud)

为什么REJECT事件永远不会被解雇?我认为如果成功=假REJECT将被调用,我是否需要类似404的东西才能获得该结果?

编辑:不,我找不到解雇更新事件的REJECT版本的方法.有什么建议吗?

extjs extjs4.1

4
推荐指数
1
解决办法
1万
查看次数

一起使用file-loader和html-loader

我正在开发一个角度应用程序,它需要将html文件提取为纯HTML文件,同时应检查是否<img src="...">需要这些图像(作为资源).此外,图像基于根路径(so /images/something.png),它们需要相对于webpack context设置(基本路径)进行解析.

我怎样才能做到这一点?无法让html-loader与文件加载器很好地协同工作.由于前者输出一个JS文件(带有require语句),后者需要一个普通的HTML文件.

webpack webpack-html-loader webpack-file-loader

4
推荐指数
1
解决办法
8059
查看次数

应用程序设置中的StringCollection不会被存储

我想使用StringCollection作为应用程序设置,但是在阅读它不是问题时,我发现没有存储设置.

如何使其工作?任何解决方法?这有什么问题?

我正在使用的代码:

    private static void AddToRecentProfiles(string path)
    {
        if (SpellCaster3.Properties.Settings.Default.RecentProfiles == null) 
            SpellCaster3.Properties.Settings.Default.RecentProfiles = new StringCollection();

        int index = SpellCaster3.Properties.Settings.Default.RecentProfiles.IndexOf(path);
        if (index >= 0)
            SpellCaster3.Properties.Settings.Default.RecentProfiles.Swap(index, 0);
        else
            SpellCaster3.Properties.Settings.Default.RecentProfiles.Insert(0, path);

        if (SpellCaster3.Properties.Settings.Default.RecentProfiles.Count > SpellCaster3.Properties.Settings.Default.MaxRecentProfiles)
            SpellCaster3.Properties.Settings.Default.RecentProfiles.RemoveAt(SpellCaster3.Properties.Settings.Default.RecentProfiles.Count - 1);

        SpellCaster3.Properties.Settings.Default.Save();

        OnRecentProfilesChanged(SpellCaster3.Properties.Settings.Default.RecentProfiles, EventArgs.Empty);
    }
Run Code Online (Sandbox Code Playgroud)

c# string collections application-settings

3
推荐指数
1
解决办法
5286
查看次数

通过输入流发送音频,就像我正在用麦克风说话一样

我想通过我的输入设备发出声音:我不想播放它,我只是希望它"看起来像"我正在用我的麦克风说话而是我正在播放类似于wav文件的内容流.

这是因为我想从我用来与朋友交谈的应用程序中独立发送音频(所以如果我使用skype/teamspeak/ventrilo等等也没关系).

可能吗?怎么做这样的事情?

c# audio input microphone

3
推荐指数
1
解决办法
5141
查看次数

Rails 4,资产管道导致用户可下载文件被下载两次

我的app目录中有一个名为"uploads"的文件夹,用户可以在其中上传文件和下载文件.我不希望uploads文件夹在公共目录中,因为我想控制下载授权.

在我的控制器中,我有:

send_file Rails.root.join('app', 'uploads', filename), :type => 'application/zip', :disposition => 'inline', :x_sendfile=>true
Run Code Online (Sandbox Code Playgroud)

这实际上很好.问题是,当我在生产服务器上,当我运行rake资产:预编译,并有一个资产目录时,该文件下载两次.该文件第一次下载时,浏览器就像没有进行任何操作一样(没有加载旋转),但我看到数据正在谷歌Chrome开发人员网络选项卡中传输.然后在下载文件后,会出现提示,询问用户是否要下载文件.

删除公共目录中的assets文件夹可以解决此问题,但我想使用资产管道.我还尝试将require_tree中的资产管道需求更改为require_directory.

有谁知道如何让send_file与资产管道一起正常工作?

谢谢.

ruby-on-rails sendfile ruby-on-rails-4

3
推荐指数
1
解决办法
1232
查看次数