如何建议新的计算机域名

时间:2016-07-21 11:20:15

标签: c# sorting

我正在尝试编写一个程序,通过输入计算机组的名称搜索我们的域名(例如,对于IT用户计算机名称以DITXX开头,其中XX是计算机的数量)并建议新的计算机名称。例如,我们有计算机:

  1. DIT01
  2. DIT02
  3. ..
  4. DIT10
  5. DIT11
  6. ..
  7. DIT156
  8. 我有TextBox,我输入组名,然后我得到一个包含此名称的计算机列表,我将它们放入List和Array。但是如何获得最后使用的名称并建议新的(这里程序应该建议名称DIT157因为姓氏DIT156)?我应该使用自然排序吗?或修改名称DIT只有数字,排序,然后只是找到最后,添加1,然后显示修剪名称+这个数字?

    代码片段:

    string name = textBox1.Text;
    DirectoryEntry domain = new DirectoryEntry("LDAP://*****.****.**.**");
    DirectorySearcher search = new DirectorySearcher(domain);
    search.Filter = ("(&(ObjectCategory=computer)(cn=") + name + ("*))");
    
    List<string> temp = new List<string>();
    
    richTextBox1.Text = "";
    List<string> ComputerList = new List<string>();
    
    foreach (SearchResult c in search.FindAll())
    {
        var tmp = (c.GetDirectoryEntry().Name.ToString());
    
        richTextBox1.Text = richTextBox1.Text + (tmp.Replace("CN=", "")) + (Environment.NewLine);
        //listView1.Items.Add(tmp.Replace("CN=", ""),2);
        temp.Add (tmp.Replace("CN=", ""));
    
        ComputerList.Add(tmp.Replace("CN=", ""));
    }
    
    ComputerList.Sort((x, y) =>
    {
        int ix, iy;
        return int.TryParse(x, out ix) && int.TryParse(y, out iy)
            ? ix.CompareTo(iy) : string.Compare(x, y);
    });
    string[] Computers = ComputerList.ToArray();
    Array.Sort(Computers);
    
    foreach (var item in Computers)
    {
        listView1.Items.Add(item);
        Console.WriteLine(item.ToString());
    } 
    

1 个答案:

答案 0 :(得分:0)

对于随机计算机名称生成,我个人会尝试查询/排序以外的其他内容,例如使用Random。或者将Path.GetRandomFileName()的结果附加到您的前缀(删除&#39;。&#39;)并将总长度限制为15。

如果您选择进行查询和排序,我会剥离文本并单独按数字排序,因为您的示例计算机名称具有不同的长度。按字符串排序会导致DIT11和DIT110在列表中彼此相邻。如果你编写一个排序算法,你最终会剥离文本。