Rajaram24101984 Ответов: 3

Сортировка целочисленных массивов в VB.NET


У меня есть двумерный целочисленный массив x, y, как показано ниже
{1160, 0}, 
{1560, 400}, 
{11940, 10380}, 
{12480, 540},
{12540, 60},
{12600, 60},
{12720, 120},
{13120, 400},
{13380, 260},
{13680, 300},
{14000, 320}

Мне нужно выбрать {13120, 400}, так как x является самым высоким, а y-самым высоким при сравнении с другими элементами y, соответствующими самому высокому значению x. Я делаю это в VB.NET. Мы очень ценим вашу помощь. Спасибо.

Что я уже пробовал:

For intIndex As Integer = 0 To a.GetUpperBound(0)
    If a(intIndex, 0) > intCurrentHighestValue Then
        intCurrentHighestValue = a(intIndex, 0)
        intCurrentHighestValue2 = -1
    End If
    If a(intIndex, 0) = intCurrentHighestValue Then
        If a(intIndex, 1) > intCurrentHighestValue2 Then
            intCurrentHighestValue2 = a(intIndex, 1)

        End If
    End If
Next

ZurdoDev

Так где же ты застрял?

Rajaram24101984

Я не получил ожидаемого результата.. это приносит наивысшую ценность

Richard Deeming

В какой странной вселенной 13120 выше, чем 14000?!

Nelek

Сначала найдите MAX на Y, из всех возможных Y (400 в данном случае) найдите max X (13120 в данном случае).
Сначала найдите самый высокий Y, затем самый высокий X

Просто не очень хорошо сформулировано :)

Richard Deeming

В этом случае, конечно, вы найдете третий пункт, который имеет y = 10380, что явно выше, чем 400?

Nelek

правда: doh:: doh:

Rajaram24101984

14000 имеет более низкое значение по сравнению со стоимостью 13120 г

Richard Deeming

И 13120 имеет более низкую y значение чем 11940.

Так 13120 это неправильно, если вы ищете самую высокую ценность x, и это неправильно, если вы ищете самое высокое значение y.

Вам нужно определить, какие критерии вы используете для выбора 13120 в итоге.

Richard Deeming

Ответ на ваш удаленный комментарий: "@Richard Deeming 13120 больше, чем 11940"

13120 меньше, чем 14000, так что это не самый высокий x ценность.

400 меньше, чем 10380, так что это не самый высокий y ценность.

Так как же вы пришли к этому {13120,400} как "высшая" ценность?

3 Ответов

Рейтинг:
1

OriginalGriff

Во-первых, это не сортировка. Сортировка-это процесс переупорядочивания всех элементов таким образом, чтобы они находились в последовательности, обычно восходящей или нисходящей.
То, что вы делаете, - это находите максимальное значение, что гораздо проще-вы не можете просто использовать код "максимального значения" и ожидать, что он будет сортировать данные, и вы действительно можете просто "настроить" его для выполнения совсем другой работы!
Начните читать здесь: сортировка 2d массива vb - поиск в Google[^]- у вас должно быть достаточно идей, чтобы закончить домашнее задание самостоятельно.


Rajaram24101984

Когда вы смотрите на самое высокое значение x, оно равно 14000, но значение y ниже. Когда вы смотрите на значение y, самое высокое значение равно 10380, но значение x ниже.. таким образом, ответ будет {13120, 400}

Nelek

Он просто плохо выражался.

Maciej Los

5ед!

Рейтинг:
1

Maciej Los

Кажется, ты говоришь о Рисование.Точка[^]

Если я прав, вы можете отсортировать их с помощью Linq:

Dim points As List(Of Drawing.Point) = New List(Of Drawing.Point) From 
	{
		New Drawing.Point(1160, 0), 
		New Drawing.Point(1560, 400),  
		New Drawing.Point(11940, 10380),  
		New Drawing.Point(12480, 540), 
		New Drawing.Point(12540, 60), 
		New Drawing.Point(12600, 60), 
		New Drawing.Point(12720, 120), 
		New Drawing.Point(13120, 400), 
		New Drawing.Point(13380, 260), 
		New Drawing.Point(13680, 300), 
		New Drawing.Point(14000, 320)
	}
'case #1
Dim sortedPointsByX = points.OrderByDescending(Function(p) p.X).ToList()

'case #2
Dim sortedPointsByY = points.OrderByDescending(Function(p) p.Y).ToList()


Выше код возвращает:
'#1
14000 320 
13680 300 
13380 260 
13120 400 
12720 120 
12600 60 
12540 60 
12480 540 
11940 10380 
1560 400 
1160 0 

'#2
11940 10380 
12480 540 
1560 400 
13120 400 
14000 320 
13680 300 
13380 260 
12720 120 
12540 60 
12600 60 
1160 0 


Рейтинг:
0

Nelek

Я знаю, что вы хотите его в VB, но я не собираюсь давать вам все готовое решение...

for (int i = 0; i < number_of_pairs; i++)
{
   if (array_value_y[i] >= value_y_saved)
   {
      value_y_saved = array_value_y[i];

      if (array_value_x[i] >= value_x_saved)
      {
         value_x_saved = array_value_x [i];
      }
   }
}


Это должно сработать. Теперь просто приспособьте его к вашим потребностям.

Правка: Как правильно сказал Ричард Диминг... на самом деле не совсем ясно, что вы хотите сделать, но это должно быть достаточно легко адаптироваться в зависимости от того, что вам нужно проверить в первую очередь, чтобы дать наивысший приоритет.


Maciej Los

5ед!