我有3个字符串,每个字符串都包含在一个数组中。
string[] folderArray = {"1 - Name", "4 - Another name", "3 - Another name"}
我需要获得下一个可用的ID(文件夹编号)。
例如,所需的ID为2,因为它会看到" 2"数组中缺少ID。
找到此问题的PHP副本答案 0 :(得分:1)
考虑以下几点:
SortedList<int, String>
的排序集合(例如IComparer<int>
)(尝试Comparer<int>.Default
)list.ContainsKey(n) == true && list.ContainsKey(n + 1) == false
- 然后下一个ID为n + 1
我想将此作为评论发布,但它不适用于格式: - /。
答案 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中的项目始终采用
形式没有空字符串,没有空值等