There's also a RopeString type. --Tim
On Thursday, February 26, 2015 07:32:27 AM David P. Sanders wrote: > El jueves, 26 de febrero de 2015, 9:15:38 (UTC-6), Josh Langsfeld escribió: > > It's equivalent to str = str * "def". I believe that's the case for all > > +=, *=, etc operators and all types. > > That's correct. So the original code is O(n^2). A good way to do this is > using IOBuffer, as below. > > function concat1(N) > s="" > for i=1:N > s*=string(i) > end > s > end > > function concat2(N) > buf = IOBuffer() > for i=1:N > print(buf, string(i)) > end > takebuf_string(buf) > end > > # Compile the functions and check they give the same output: > N = 10 > println(concat1(N)) > println(concat2(N)) > > N = 10000 > @time concat1(N); > @time concat2(N); > > With N = 100000, concat2 is almost instantaneous, and I couldn't be > bothered to wait for concat1 to finish. > > David. > > > On Thursday, February 26, 2015 at 9:23:19 AM UTC-5, Jerry Xiong wrote: > >> Considering below code: > >> str="abc" > >> str*="def" > >> Is the new string "def" just be appended after the memory space of "abc", > >> or both strings were copied to a new momory space? Is str*="def" equal to > >> str=str*"def" and str="$(str)def" in speed and memory level? Is below > >> code > >> in O(n) or in O(n^2) speed? > >> > >> s="" > >> for i=1:10000 > >> > >> s*=string(i) > >> > >> end
