有没有办法找到比这更有效/更快的最小价值指数?
int minimumValueIndex = List.IndexOf(List.Min());
Run Code Online (Sandbox Code Playgroud) 特定
IEnumerable<T> first;
IEnumerable<T> second;
Run Code Online (Sandbox Code Playgroud)
并且,这两个first和second由一个比较器进行排序Func<T, T, int>,对于平等返回0,-1时,第一被"较小"和1时第二个是"较小".
是否有一种直接的方法使用LINQ合并两个序列,使得结果序列也由同一个比较器排序?
我们目前正在使用手工制作的算法,但是直接LINQ语句的可读性会更好.
有没有办法合并(没有欺骗的联合)两个给定的列表,并使用ONE for循环以排序的方式存储项目?
另外,我正在寻找一种不使用API方法的解决方案(例如,union,sort等).
示例代码.
private static void MergeAndOrder()
{
var listOne = new List<int> {3, 4, 1, 2, 7, 6, 9, 11};
var listTwo = new List<int> {1, 7, 8, 3, 5, 10, 15, 12};
//Without Using C# helper methods...
//ToDo.............................
//Using C# APi.
var expectedResult = listOne.Union(listTwo).ToList();
expectedResult.Sort();//Output: 1,2,3,4,5,6,7,8,9,10,11,12,15
//I need the same result without using API methods, and that too by iterating over items only once.
}
Run Code Online (Sandbox Code Playgroud)
PS:我在接受采访时被问过这个问题,但还没有找到答案.
我编写这个函数来合并两个数组.
private static int[] Merge(int[] array1, int[] array2)
{
var mergedArray = new int[array1.Length + array2.Length];
int i = 0, j = 0, k = 0;
while(k < mergedArray.Length)
{
if(i == array1.Length || j == array2.Length)
{
if (i <= j)
{
mergedArray[k] = array1[i];
i++;
}
else
{
mergedArray[k] = array2[j];
j++;
}
}
else
{
if(array1[i] < array2[j])
{
mergedArray[k] = array1[i];
i++;
}
else
{
mergedArray[k] = array2[j];
j++;
}
}
k++;
}
return mergedArray;
} …Run Code Online (Sandbox Code Playgroud)