public void Sort() { if (Tuple == null || Tuple.Count <= 1) { return; } List <double> numbers = new List <double>(); List <string> strings = new List <string>(); for (int i = 0; i < Tuple.Count; i++) { Variable arg = Tuple[i]; if (arg.Tuple != null) { arg.Sort(); } else if (arg.Type == VarType.NUMBER) { numbers.Add(arg.AsDouble()); } else { strings.Add(arg.AsString()); } } List <Variable> newTuple = new List <Variable>(Tuple.Count); numbers.Sort(); strings.Sort(); for (int i = 0; i < numbers.Count; i++) { newTuple.Add(new Variable(numbers[i])); } for (int i = 0; i < strings.Count; i++) { newTuple.Add(new Variable(strings[i])); } Tuple = newTuple; }