Я хочу преобразовать этот сценарий, чтобы выполнить сортировку кода с использованием любого алгоритма сортировки, например, быстрой сортировки, сортировки по пузырькам, сортировки выделения и т. Д.
Есть ли способ заменить
instantiatedObjects = instantiatedObjects.OrderBy(go => go.name).ToList();
и изменить метод сортировки на быструю сортировку в примере?Нужно ли использовать массивы или при использовании списка, например, можно ли заставить его работать с быстрой сортировкой и другими алгоритмами сортировки?
Скрипт кратко создает клон игровых объектов на сцене, затем сортирует их, затемон уничтожает исходные игровые объекты, поэтому клоны будут единственными на сцене, которые будут отсортированы.
Начало , Рандомизированное , Сортировка
Вот мой сценарий;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
namespace Assets {
class Gameobjects : MonoBehaviour {
public Button s_YourButton;
[SerializeField]
private GameObject[] deck;
public List<GameObject> instantiatedObjects;
void Start() {
Button btn = s_YourButton.GetComponent<Button>();
//Calls the TaskOnClick method when you click the Button
btn.onClick.AddListener(TaskOnClick);
}
List<Vector3> vectorList = new List<Vector3>();
void TaskOnClick() {
Fill();
instantiatedObjects = instantiatedObjects.OrderBy(go => go.name).ToList();
for (int i = 0; i < instantiatedObjects.Count; i++) {
instantiatedObjects[i].transform.position = vectorList[i];
}
string name = "1";
string name1 = "2";
string name2 = "3";
string name3 = "4";
string name4 = "5";
GameObject go1 = GameObject.Find(name);
GameObject go2 = GameObject.Find(name1);
GameObject go3 = GameObject.Find(name2);
GameObject go4 = GameObject.Find(name3);
GameObject go5 = GameObject.Find(name4);
//if the tree exist then destroy it
if (go1 & go2 & go3 & go4 & go5) {
Destroy(go1.gameObject);
Destroy(go2.gameObject);
Destroy(go3.gameObject);
Destroy(go4.gameObject);
Destroy(go5.gameObject);
}
}
public void Fill() {
vectorList.Clear();
instantiatedObjects = new List<GameObject>();
for (int i = 0; i < deck.Length; i++) {
GameObject spawnedObject = Instantiate(deck[i]) as GameObject;
instantiatedObjects.Add(spawnedObject);
vectorList.Add(spawnedObject.transform.position);
}
}
}
}