«Самый быстрый» расплывчато; быстрее всего написать или быстрее всего выполнить?
Самое быстрое, что вы можете получить в неупорядоченном списке, будет линейным, а фактические наилучшие и худшие случаи будут зависеть от входных данных. Быстрее всего в неупорядоченном списке, вероятно, будет:
var i = 0;
foreach(var subarray in numbers)
{
if(subarray[0] == x && subarray[1] == y || subarray[0] == y && subarray[1] == x)
return i;
i++;
}
Наилучшим случаем является то, что первый элемент имеет элементы в порядке; 1 элемент, 2 сравнения равенства. В худшем случае это не там; n элементов, n * 4 сравнения равенства.
Вы можете "быстро потерпеть неудачу" в ситуациях, когда маловероятно, что совпадение будет найдено, проверив, есть ли в подмассиве хотя бы один элемент с хотя бы одной из координат. Если нет, не стоит проверять точное совпадение. Это наихудший случай, когда элемент является последним, не по порядку (n * 2 элемента, n * 6 сравнений), но в лучшем случае его там нет (n элементов, n * 2 сравнений, которые, если этот случай скорее всего лучше предыдущего).
Наконец, алгоритм «fast fast» позволяет с помощью Linq сузить число элементов, для которых вы выполняете полный набор условных проверок; Сначала вы ищите элементы, которые имеют хотя бы одну из координат (требуется максимум две проверки), а затем проверяете только те элементы, которые точно совпадают (максимум четыре проверки). Затем вы сканируете массив для первого найденного элемента, который является относительно быстрой ссылочной проверкой.
var result = numbers.Where(a=>a[0] == x || a[0] == y)
.Where(a=>a[0] == x && a[1] == y || a[0] == y && a[1] == x)
.FirstOrDefault();
if(result != null) return Array.IndexOf(numbers, result);
В лучшем случае его там нет (n элементов, n * 2 сравнений). Лишь немного хуже вероятный случай, когда только один элемент имеет любую из координат (n + 1 элементов, n * 2 + (2 или 4) сравнения). В худшем случае совпадение - это последний элемент, вышедший из строя, И каждый элемент в списке имеет первую координату, которая является x или y (n * 3 элемента, n * 7 сравнений, но это ЧРЕЗВЫЧАЙНО маловероятно в большинстве реальных данных) , Средний регистр будет зависеть от количества элементов, которые имеют хотя бы одну из координат в качестве первого значения.