【unity造轮子】排序排行榜的制作

前言

排行榜在各个地方使用都很常见,本文主要介绍几种排序方法的实现

Sort方法排序

List类中有一个【Sort方法】
可以非常快速的对【整数类】
或者【小数类】元素进行升序
使用

public class TestCompare MonoBehaviour
{
    
    
	public List<int>numbers;
	private void Start()
	{
    
    
		numbers=new List<int>(){
    
    20,10,30,70,60,40,50,90,80,100}:
	}
	private void Update()
	{
    
    
		if(Input.GetKeyDown(KeyCode.Space))
			Sort();
		}
	}
	private void Sort()
	{
    
    
		numbers.Sort();
	}
}

复杂的数据排序测试

但是,只有基本的数据类型(指整数类和小数类)
可以直接使用【Iist.Sort方法】进行升序排列

而我们之后需要比较的,并不是单纯的【整数类型
而是每一个【角色资源文件中的得分】,即集合中需要排序的元素从【整数类】变成了【对像的某一属性
这里介绍一个概念【方法/函数重载Method Overloading】
(面试常问的小题)
指的就是方法/函数名称相同,但是括号内的参数不同,这里的$ot方法就有其他三种其他参数形式

其实就是一个包含了两个参数的【委托】
(委托是一个类型,这个类型可以赋值一个方法的引用,可以当作参数来传递
这里就是需要将一个函数名为Comparelnt,作为委托当作参数,使用在24行的sort0中)
因此使用这个方法,我们只需要定义一个【委托】两个参数都是PlayerData类型的

private void Sort()
{
    
    
	numbers.Sort(CompareInt);
}
private int CompareInt(int_a,int_b)
{
    
    
	//RETURN Greater one between A and B
	return _a.CompareTo(_b);
}

使用A.CompareTo(B)方法其实就是将AB进行比较
该方法会返回三个值:-1,1和0
如果返回值是1则说明A大于B
如果返回值是-1就表明A小于B

事实上,当你有了经验后,特别是在排序的问题上
会看到很多人用【Lambda表达式】简化代码量,更方便阅读

private void SortByCompare()
{
    
    
	//numbers.Sort(CompareInt);
	numbers.Sort((a,b)=>a.CompareTo(b));//MARKER LAMBDA Express/statement
	//If
	Debug.Log("CompareInt LAMBDA");
}

我们既然可以使用方法器,对整数类排序
只要将Comparelnt(O方法中的参数类型进行调换,就可以完成对象属性的比较
(比如比较角色的得分,或者击杀数,进行排序)

numbers.Sort ((obj1,obj2)=>obj1.var.CompareTo(obj2.var))

冒泡排序

冒泡排序是许多领域包括Unty中经常使用的一种基本算法
(如背包系统中按照编号重新排序,互换物品位置等都用到了冒泡排序)

冒泡算法【核心思路】是比较相邻两个元素的大小,如果前者大于后者,那么【互换】位置
反复循环进行比较,直到所有元素都不需要【互换】位置为止

public List<PlayerData>playerDatas = new List<PlayerData>();

private void SortByBulle()
{
    
    
	bool isBubble m true;
	do
	{
    
    
		isBubble▣false;
		for (int 1=0;playerDatas.Count -1;1++)
		{
    
    
			if (playerDatas[i].playerHighestscore > playerDatas[i+1].playerHighestscore)
				PlayerData temp = playerDatas[i]:
				playerDatas[i] = playerDatas[i+1];
				playerDatas[i+1] = temp:
				isBubble true;
			}
		}
	}
	while (isBubblc);
}

在这里插入图片描述

使用LINQ排序

同样的LNQ也可以很方便的解决升序排列的问题
(Language integrated Query:语言集成查询)
使用LINQ前必须引用System.Linq:命名空间
LINQ常用来对元素进行【排序】【搜索】】以及按照条件【筛选】等
(我的卡牌收藏系统系列打算使用LINQ功能搜索卡牌,之前的方法性能上不是很好)
通过【OrderBy】方法可以直接对集合中的元素进行【升序排列】

//STEP 04 SORT BY LINO
if (Input.GetKeyDown(KeyCode.Space))
(
	SortByLINQ(playerDatas.Count):
}

//STEP 04
private ListsPlayerData>Soret8yLINQ(int count)
{
    
    
	return playerDatas.OrderBy(t=>t.playerHighestScore).Take(count).ToList();
}

完毕

好了,我是向宇,https://xiangyu.blog.csdn.net/

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是开始自习unity。最近创建了一个新栏目【你问我答】,主要是想收集一下大家的问题,有时候一个问题可能几句话说不清楚,我就会以发布文章的形式来回答。 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

我知道阁下是一位白嫖高手,但假如我说下面有个打赏按钮,那阁下又该如何应对呢?
(量力而行,力虽微,心暖人,你的支持是我创作的最大动力)

猜你喜欢

转载自blog.csdn.net/qq_36303853/article/details/131036014