示例#1
0
    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;
      }
    }