[ruby-core:103055] [Ruby master Misc#17751] Do these instructions (<<, +, [0..n]) modify the original string without creating copies?
From:
cart4for1@...
Date:
2021-03-27 08:45:02 UTC
List:
ruby-core #103055
Issue #17751 has been updated by stiuna (Juan Gregorio). @xtkoba Hey thanks, your code gave me a great idea, with some modifications I can do what I needed. Very helpful. One question, between an array and a string even if they have the same information; do they both occupy the same amount of memory? ``` ruby arr = ["foo", bar"] str = "foobar" ``` *(Just in case the '_writeSince_' thing is still an open question, hopefully someone can help with that).* ---------------------------------------- Misc #17751: Do these instructions (<<,+,[0..n]) modify the original string without creating copies? https://bugs.ruby-lang.org/issues/17751#change-91116 * Author: stiuna (Juan Gregorio) * Status: Open * Priority: Normal ---------------------------------------- In my program a string increases considerably in size inside a loop, at the end of that loop a header is created that will have to go to the beginning of that string. During the whole loop: ``` ruby str << "some data" ``` At the end: ``` ruby header = "other data" str = header + str ``` I understand that using (+) creates a copy to then modify the original variable, that is not desirable, I would like to do something similar to (<<), which I understand does not create copies. If I do this: ``` ruby header << str ``` I would have two variables with a very large size. I also have this other code and I don't know if it is an "in place" modifier: ``` ruby str = "12345" str[0..2] = "" #s => 45 ``` In short, I want to know what instructions I should use to remove a given range from a string and how to concatenate to both the beginning and end of the target string without having to create copies. -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>