clyde Posted May 30, 2014 I don't need to know this, but I want to know and I haven't been able to find it online. In C#, why doesn't the string.Split() method need to know the length of the array it's creating? So for instance: String[] exampleArray = sampleSentence.Split(new Char[]{':'}); I get why the Char[] doesn't need to know the length, because it is being instantiated with the contents in the brackets. But the String[] doesn't know how many strings it'll end up with; doesn't seem fair. Just wondering. Share this post Link to post Share on other sites
itsamoose Posted May 30, 2014 In that particular case, and in general concerning methods that return collections, the length of the collection will be determined by the operation. This allows you to pass in a string of arbitrary length with an arbitrary number of parameters and always get the correct result. The difference between that and creating an array manually is that the string.Split() method will handle the array's creation and return the result, but within the method the length of the array will be determined by the split algorithm. Also a neat trick with the params keyword in C# is that you don't actually have to create an array to pass in as the argument. Instead you can just list all the chars you want to be used to split the string separated by commas. This will be incredibly useful once you get around to writing editor scripts in Unity. string[] exampleArray = sampleSentence.Split(',', '/t', 'c'); Share this post Link to post Share on other sites
clyde Posted May 31, 2014 How can I find out what the string.Split() algorithm is? I want to see how it is managing to make an array without initializing its length. Edit: I have a hypothesis. I bet it is doing a foreach loop through the string and counting how many delimiters are in the string. The array would then be initialized with a size of (number of delimiters in string). If the string starts with or ends with a delimiter, it would subtract an additional 1 for either. Share this post Link to post Share on other sites
monkehhh Posted May 31, 2014 You could create a List, Add parts of the string to the List, then use ToArray on the List(?). Share this post Link to post Share on other sites
iax Posted May 31, 2014 If you're really interested how the Split method is implemented you can dive into Mono sources, you can even browse them on github, the string implementation is here https://github.com/mono/mono/blob/master/mcs/class/corlib/System/String.cs There are several Split methods but they all seem to call SplitByCharacters at some point which is the method implementing the core algorithm. I didn't study it in detail but it seems it scans the input string for separators and stores their positions in an array. When the position array is full, it calls Array.Resize on it, which doubles its size. After this process is finished it's clear how many substrings the output should have so the output array is created and filled with strings using the split position array. Note this is a System library code so it's written with performance in mind, hence the unsafe code, the use of array instead of list etc. If I had to write similar function myself and I wasn't terribly concerned about the maximum performance possible I would probably use the List + ToArray approach monkehhh mentioned. Share this post Link to post Share on other sites
clyde Posted May 31, 2014 If you're really interested how the Split method is implemented you can dive into Mono sources, you can even browse them on github, the string implementation is here https://github.com/mono/mono/blob/master/mcs/class/corlib/System/String.cs This is awesome. I like being able to see this. Share this post Link to post Share on other sites
clyde Posted September 23, 2014 Are shaders procedurally generated, animated textures? I'm curious about making a material that has cellular automata doing it's thing on a mesh during playtime. Just curious though, there is a reason I put the question in this thread. Share this post Link to post Share on other sites
osmosisch Posted September 23, 2014 Shaders are pieces of code that modify how to render a pixel or a vertex, usually based on their own or neighbour's properties. Share this post Link to post Share on other sites