从名称数组中获取下一个可用ID

时间:2015-03-05 23:02:00

标签: c# c#-4.0

我有3个字符串,每个字符串都包含在一个数组中。

string[] folderArray = {"1 - Name", "4 - Another name", "3 - Another name"}

我需要获得下一个可用的ID(文件夹编号)。

例如,所需的ID为2,因为它会看到" 2"数组中缺少ID。

可以在Finding first available ID from an array

找到此问题的PHP副本

4 个答案:

答案 0 :(得分:1)

考虑以下几点:

  • 不要使用字符串数组,使用带有正确SortedList<int, String>的排序集合(例如IComparer<int>)(尝试Comparer<int>.Default
  • 然后按顺序迭代,找到差距意味着的第一个差距:list.ContainsKey(n) == true && list.ContainsKey(n + 1) == false - 然后下一个ID为n + 1
  • 为了提高性能,您可以记住您给调用者的最后一个ID(或者如果支持也删除了最后一个文件夹)并从那里开始搜索下一个ID请求

我想将此作为评论发布,但它不适用于格式: - /。

答案 1 :(得分:1)

如果您使用SortedList类,您将解决问题...查看此代码

SortedList<int, string> lista = new SortedList<int, string>();
lista.Add(4, "Name");
lista.Add(1, "Name");
lista.Add(3, "Name");
lista.Add(7, "Name");
int nextID = 1;
foreach (var item in lista.Keys)
{
   if (nextID != item) break;
   else nextID++;
}
Console.WriteLine(nextID);

SortedList类接收TKey参数和TValue参数。她通过TKey参数对元素进行排序。您只需要在列表中添加元素,她就会为您完成工作......然后,搜索列表中不存在的下一个ID。 lista.Keys返回一个IEnumerable,其中添加了所有键,按降序排列......

答案 2 :(得分:0)

试试此代码

    string[] folderArray = { "1 - Name", "4 - Another name", "3 - Another name" };
    var listId = new List<int>();
    foreach (var item in folderArray)
    {
       var tempId = 0;
        if (int.TryParse(item.Split('-')[0].Trim(), out tempId))
           listId.Add(tempId);
    }




   listId.Sort();
   for (var i=1 ;i<listId.Count ;i++)
   {
      if(listId[i]-listId[i-1]>1)
        {
          Console.WriteLine(listId[i-1]+1);
          break;
        }
   }

答案 3 :(得分:0)

我不会这样做,但是如果你想要与你链接的PHP解决方案一样:

var missing = Enumerable.Range(1, folderArray.Length).Except(folderArray.Select(f => int.Parse(f.Split('-').First()))).First();

注意:这假设folderArray中的项目始终采用

形式
  • &#34; [number] - [some string]&#34;

没有空字符串,没有空值等