Как отсортировать массив, затем взять индекс и использовать индекс для перемещения всех соответствующих элементов? - PullRequest
1 голос
/ 11 июня 2011

У меня есть 5 разных массивов с одинаковым индексом, например:

person[0]="john", address[0]= "Druid Valley", city[0]="Atlanta", amount[0]=2000, need[0]=100; 
person[1]="emily", address[1]="50 decatur", city[1]="Chicago", amount[1]=300; need[1]=50;

Мне нужно переупорядочить все массивы в порядке убывания массива need [], а затем переупорядочить порядок других массивов на основе нового индекса для потребности [i]. Я использую JavaScript.

Спасибо,

John

Ответы [ 3 ]

1 голос
/ 11 июня 2011

Не сортируйте «нужно».Создайте индексный массив, затем отсортируйте его по необходимости.Вы не указали язык, поэтому получаете JavaScript:

var person = [], need = [];

var person = ["E", "B", "A", "C", "D"];
var need = [111, 444, 555, 333, 222];

var index = [];
var i = person.length;
while (i--) {
  index.push(i);
}
var comparator = function(a, b) {
  var need_a = need[a];
  var need_b = need[b];

  // For robustness - non-numbers get sorted last:
  if (typeof need_a != 'number' || isNaN(need_a)) need_a = -Infinity;
  if (typeof need_b != 'number' || isNaN(need_b)) need_b = -Infinity;

  if (need_a < need_b) return 1;
  if (need_b < need_a) return -1;
  return 0;
}
index.sort(comparator);

// at this point, person[index[0]] is the person with the biggest need.

var sorted_person = [];
var i = index.length;
while (i--) {
  sorted_person[i] = person[index[i]];
}

// at this point, sorted_person[0] is the person with the biggest need.

console.log(sorted_person);
1 голос
/ 11 июня 2011

Сортируйте массив need и сохраните перестановку сортировки, затем примените эту перестановку к другим массивам. Как именно вы это делаете, зависит от языка, который вы используете. Например, функция Matlab sort может возвращать как отсортированный массив, так и перестановочную сортировку.

0 голосов
/ 11 июня 2011

сделать копию массива, которая будет иметь те же значения, что и в нужном массиве (назовите его отсортированным массивом). затем посмотрите на исходный массив потребностей - и для каждой ячейки найдите, где она находится в отсортированном массиве, и поместите совпадающие значения из других массивов в тот же номер ячейки, что и в сортированном массиве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...