public static void Sort(Variant data, List <Variant> keys = null, List <Variant> options = null) { bool flag = keys == null; if (flag) { data._arr.Sort(); } else { data._arr.Sort((Variant left, Variant right) => GameTools.sortConparison(left, right, keys, options)); } }
private static int sortConparison(Variant left, Variant right, List <Variant> keys, List <Variant> opts) { int num = 0; bool flag = keys != null && keys.Count > 0; if (flag) { int num2 = -1; bool flag2 = left.ContainsKey(keys[0]._str) && right.ContainsKey(keys[0]._str); if (flag2) { bool flag3 = left[keys[0]].isStr && !int.TryParse(left[keys[0]]._str, out num2); if (flag3) { num = left[keys[0]]._str.CompareTo(right[keys[0]]); } else { bool flag4 = left[keys[0]] > right[keys[0]]; if (flag4) { num = 1; } else { bool flag5 = left[keys[0]] == right[keys[0]]; if (flag5) { num = 0; } else { num = -1; } } } } else { bool flag6 = !left.ContainsKey(keys[0]._str) && !right.ContainsKey(keys[0]._str); if (flag6) { num = 0; } bool flag7 = !left.ContainsKey(keys[0]._str); if (flag7) { num = -1; } bool flag8 = !right.ContainsKey(keys[0]._str); if (flag8) { num = 1; } } bool flag9 = num == 0; if (flag9) { List <Variant> opts2 = null; bool flag10 = opts != null && opts.Count > 1; if (flag10) { opts2 = opts.GetRange(1, opts.Count - 1); } num = GameTools.sortConparison(left, right, keys.GetRange(1, keys.Count - 1), opts2); } } bool flag11 = opts != null && opts.Count > 0; if (flag11) { uint @uint = opts[0]._uint; if (@uint == 2u) { num = -num; } } return(num); }