我正在尝试编写一个程序,通过输入计算机组的名称搜索我们的域名(例如,对于IT用户计算机名称以DITXX开头,其中XX是计算机的数量)并建议新的计算机名称。例如,我们有计算机:
我有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());
}
答案 0 :(得分:0)
对于随机计算机名称生成,我个人会尝试查询/排序以外的其他内容,例如使用Random。或者将Path.GetRandomFileName()
的结果附加到您的前缀(删除&#39;。&#39;)并将总长度限制为15。
如果您选择进行查询和排序,我会剥离文本并单独按数字排序,因为您的示例计算机名称具有不同的长度。按字符串排序会导致DIT11和DIT110在列表中彼此相邻。如果你编写一个排序算法,你最终会剥离文本。