我想要一种通用方法来找到给定数据大于下一个且小于下一个的第一个位置(我们可以将索引视为位置)。
例如,我有一个 int list[12,34,4,65],如果我给出一个数字 15(大于 12 并且小于 34)它应该返回 1,如果我给出一个数字 50 它应该返回 3 , ETC。
这是我写的,但我觉得必须有一个更简单的方法:
public static class ExtensionMethods
{
public static int FirstBetween<T>(this List<T> list, T t)
{
if (list == null)
return -1;
if(t == null)
return -1;
if(list.Count == 0 )
return 0;
T item1;
for(int index = 0;index<list.Count;index++)
{
T item2 = list[index];
if(IsBetween(item1,item2,t))
return index;
item1 = item2;
}
return list.Count;
}
private static bool IsBetween<T>(T t1, T t2, T t)
{
if (t1 == null && t2 == null)
return false;
else if(t1==null && t<=t2)//in case of the first item
return true;
else if (t2 == null && t >= t1)//in case of the last item
return true;
else if(t>=t1 && t<=t2)
return true;
else
return false;
}
}
这是未完成的代码,我觉得这太复杂了,作为模板方法它还有一些其他的问题。
有没有更简单的方法来做到这一点?