public static DsDevice[] Sort(DsDevice[] devices, params object[] arg) { try { if (devices == null) return devices; if (devices.Length <= 1) return devices; List<string> compareNames = new List<string>(); foreach (object obj in arg) { String name = obj as String; if (!string.IsNullOrEmpty(name)) { compareNames.Add(name); continue; } DsDevice dev = obj as DsDevice; if (dev == null) continue; if (dev.Name == null) continue; if (dev.Name.Length == 0) continue; compareNames.Add(dev.Name); } if (compareNames.Count == 0) return devices; List<string> names = new List<string>(); for (int i = 0; i < devices.Length; ++i) { if (devices[i] == null) continue; if (devices[i].Name == null) continue; if (devices[i].Name.Length == 0) continue; names.Add(devices[i].Name); } //sort the devices based float[] results = new float[devices.Length + 20]; for (int x = 0; x < results.Length; ++x) { results[x] = 0.0f; } for (int i = 0; i < compareNames.Count; ++i) { Levenstein comparer = new Levenstein(); float[] tmpResults = comparer.batchCompareSet(names.ToArray(), compareNames[i]); for (int x = 0; x < tmpResults.Length; ++x) { results[x] += tmpResults[x]; } } List<SortItem> items = new List<SortItem>(); for (int i = 0; i < devices.Length; ++i) { SortItem item = new SortItem(); item.rate = results[i]; item.device = devices[i]; items.Add(item); } items.Sort(); DsDevice[] newDevices = new DsDevice[items.Count]; int index = 0; foreach (SortItem item in items) { newDevices[index] = item.device; index++; } return newDevices; } catch (Exception ex) { Log.Log.Write(ex); return devices; } }