ArrUtils.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import {_decorator, Component, math, Node} from 'cc';
  2. const {ccclass, property} = _decorator;
  3. @ccclass('ArrUtils')
  4. export class ArrUtils {
  5. public static shuffleArray<T>(array: T[]): T[] {
  6. // 复制数组以避免直接修改原数组
  7. let arrayCopy = [...array];
  8. // 使用sort方法和一个随机比较函数来随机排序数组
  9. arrayCopy.sort(() => Math.random() - 0.5);
  10. return arrayCopy;
  11. }
  12. /**
  13. * 数组升序
  14. * @param arr
  15. */
  16. public static upOrder(arr: any[]) {
  17. arr.sort((a, b) => a - b)
  18. }
  19. /**
  20. * 数组降序
  21. * @param arr
  22. */
  23. public static downOrder(arr: any[]) {
  24. arr.sort((a, b) => b - a)
  25. }
  26. /**
  27. * 每次返回数组的随机一个序号,但是序号不重复
  28. * @param tArr 目标数组
  29. * @param indexSet 已经生成的序号集合
  30. * @returns 返回随机序号
  31. */
  32. public static getRandomUniqueIndex(tArr: any[], indexSet: Set<number>) {
  33. if (indexSet.size > 0) {
  34. const bArr: any[] = new Array()
  35. tArr.forEach((val, index) => {
  36. if (!indexSet.has(index)) {
  37. bArr.push(index)
  38. }
  39. })
  40. const i = math.randomRangeInt(0, bArr.length - 1)
  41. indexSet.add(bArr[i])
  42. return bArr[i]
  43. } else {
  44. const i = math.randomRangeInt(0, tArr.length - 1)
  45. indexSet.add(i)
  46. return i
  47. }
  48. }
  49. /**
  50. * 删除set最后一个元素
  51. * @param set
  52. * @returns
  53. */
  54. public static removeLastSet(set: Set<any>): boolean {
  55. // 将 Set 转换为数组
  56. const itemsArray = Array.from(set);
  57. // 检查数组是否为空
  58. if (itemsArray.length === 0) {
  59. return false; // 或者你可以抛出一个错误,表示没有元素可以删除
  60. }
  61. // 获取最后一个元素的值
  62. const lastElement = itemsArray[itemsArray.length - 1];
  63. // 从 Set 中删除该元素
  64. set.delete(lastElement);
  65. return true; // 表示删除成功
  66. }
  67. }