Array.Sort

Программирование на Юнити.

Array.Sort

Сообщение ret 31 май 2010, 16:31

нужно отсортировать массив пользовательских объектов.
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50

Re: Array.Sort

Сообщение Zaicheg 31 май 2010, 18:07

ret писал(а):нужно отсортировать массив пользовательских объектов.

Какие объекты, критерии.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Array.Sort

Сообщение ret 31 май 2010, 18:34

Код: Выделить всё
class Test {
   function Test(angle: float, hit: RaycastHit) {
      this.angle = angle;
      this.hit = hit;
   }
   
   var angle: float;
   var hit: RaycastHit;
}

function BlaBla {
      var arr = new  Array ();

     ...
     for(var i=a-maxAngle; i<a+maxAngle; i+=10) {
      
      var dir = ForAngle(i);
      if (!Physics.Raycast (transform.position, dir, hit, 5.0)) {
         arr.Push(new Test(i, hit));
      }
   }
}


Критерий "RaycastHit.distance" Нужна отсортировать в порядке убывания. У мелкосовта Sort функция выглядит так "function sort(sortFunction : Function ) : Array" а в доках юнити "function Sort () : Array" отсюда и вопрос возможно ли отсортировать массив с помощью стандартных средств?
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50

Re: Array.Sort

Сообщение Multirezonator 02 июн 2010, 07:27

Можно использовать SortedList для создания отсортированного массива, где ключом сортировки будет ваш distance. Такой подход позволяет легко добавлять новые элементы и в случае необходимости получать стандартный массив элементов в отсортированном виде (SortedList.CopyTo ).
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Array.Sort

Сообщение ret 03 июн 2010, 12:52

Собственно мне нужно внимательней читать доку. в юнити свой Array. От сюда и проблемы. Решается использованием других контейнеров. Пример:
Код: Выделить всё
class MyClass {
   var first: int;
   var second: int;

   function MyClass(first: int, second: int) {
      this.first = first;
      this.second = second;
   }

   function ToString() : String {
      return "{" + first + ", " + second + "}";
   }
}

class MyComparer extends IComparer {

   function Compare(x, y) {
      return x.first - y.first;
   }
}

function Awake() {

   var i: int;
   var comparer = new MyComparer();

   var array1: MyClass[] = new MyClass[3];
   
   array1[0] = new MyClass(2, 1);
   array1[1] = new MyClass(1, 2);
   array1[2] = new MyClass(0, 9);
   
   System.Array.Sort(array1, comparer);
   
   print("array1 after sort:");
   for(i=0; i<array1.length; ++i) {
      print(array1[i]);
   }
   
   var array2: ArrayList = new ArrayList();

   array2.Add(new MyClass(2, 1));
   array2.Add(new MyClass(1, 2));
   array2.Add(new MyClass(0, 9));
   
   array2.Sort(comparer);

   print("array2 after sort:");
   for(i=0; i<array2.Count; ++i) {
      print(array2[i]);
   }
}
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


cron