我目前正在建立/連接正在開發的程序中相當大的字符串。爲了給出一些上下文,全字符串具有終端的大小。自從我開發一個終端應用程序以來,這發生了很多。我發現數據結構爲Buffer
,這似乎是將字符串與標準庫連接的最高性能方式。Ocaml緩衝區修改特定位置
如果我還經常需要更新某個特定位置緩衝區的某個部分,這是正確的選擇嗎?假設字符20到50? 在這種情況下是否有更好的方法?
我目前正在建立/連接正在開發的程序中相當大的字符串。爲了給出一些上下文,全字符串具有終端的大小。自從我開發一個終端應用程序以來,這發生了很多。我發現數據結構爲Buffer
,這似乎是將字符串與標準庫連接的最高性能方式。Ocaml緩衝區修改特定位置
如果我還經常需要更新某個特定位置緩衝區的某個部分,這是正確的選擇嗎?假設字符20到50? 在這種情況下是否有更好的方法?
AFAICS,沒有辦法改變Buffer.t
的內容,除了添加到最後。也許你應該看看模塊Bytes
。 A Bytes.t
無處不在,只有長度不能改變。但看起來你需要的長度是固定的:終端的大小(如果終端窗口調整大小,你可以用新的終端窗口代替Bytes.t
)。
@coredump和@kne給出了很好的答案。我可能只是補充一點,在今天的世界中,一個字節是一個糟糕的字符表示。所以你可能會考慮使用一個數組或一個bigarray。
爲什麼'byte'是一個糟糕的角色表示? array/bigarray有什麼優勢? – Seneca
我使用的終端(都是軟件)可以顯示任何Unicode字符。所以這些字符每個都有21位表示。 array和bigarray的優點是它們可以有足夠大的元素來容納21位。 –
Gap buffers&co:https://stackoverflow.com/questions/3169440/text-editor-theory – coredump