6b45817391fda8032e9c3052f72099ae80b977e5.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. System.register(["cc"], function (_export, _context) {
  2. "use strict";
  3. var _cclegacy, ArrayUtil, _crd;
  4. _export("default", void 0);
  5. return {
  6. setters: [function (_cc) {
  7. _cclegacy = _cc.cclegacy;
  8. }],
  9. execute: function () {
  10. _crd = true;
  11. _cclegacy._RF.push({}, "83341COeitPRIHcw18VS7g3", "ArrayUtil", undefined);
  12. _export("default", ArrayUtil = class ArrayUtil {
  13. /**随机打乱一个数组 */
  14. static shuffleArray(array) {
  15. let currentIndex = array.length;
  16. let temporaryValue;
  17. let randomIndex; // While there remain elements to shuffle...
  18. while (currentIndex !== 0) {
  19. // Pick a remaining element...
  20. randomIndex = Math.floor(Math.random() * currentIndex);
  21. currentIndex--; // And swap it with the current element.
  22. temporaryValue = array[currentIndex];
  23. array[currentIndex] = array[randomIndex];
  24. array[randomIndex] = temporaryValue;
  25. }
  26. return array;
  27. } // Fisher-Yates 洗牌算法
  28. //const originalArray = [1, 2, 3, 4, 5];
  29. //const shuffledArray = shuffleArray([...originalArray]);
  30. static shuffleArray2(array) {
  31. for (let i = array.length - 1; i > 0; i--) {
  32. // 生成一个随机索引
  33. const j = Math.floor(Math.random() * (i + 1)); // 交换元素
  34. [array[i], array[j]] = [array[j], array[i]];
  35. }
  36. return array;
  37. }
  38. /**合并两个数组元素,移除相同的 */
  39. static MergeAndRemoveDuplicates(arr1, arr2) {
  40. const merged = [...arr1, ...arr2]; // 合并两个数组
  41. const uniqueValues = Array.from(new Set(merged)); // 去重
  42. return uniqueValues;
  43. }
  44. /**排除数组1在数组2里有的元素,返回新数组*/
  45. static ExcludeElements(array1, array2) {
  46. const set = new Set(array2); // 将 array2 转换为 Set
  47. return array1.filter(item => !set.has(item));
  48. }
  49. /**检测数组元素是否能满足顺序的组合*/
  50. static checkSequentialCombination(arr) {
  51. const sortedArr = arr.slice().sort((a, b) => a - b);
  52. for (let i = 0; i < sortedArr.length - 1; i++) {
  53. if (sortedArr[i] + 1 !== sortedArr[i + 1]) {
  54. return [];
  55. }
  56. }
  57. return sortedArr;
  58. }
  59. /**从一个数组中找出是否有连续的组合*/
  60. static findSequentialCombinations(arr) {
  61. const result = [];
  62. arr.sort((a, b) => a - b);
  63. let currentSequence = [];
  64. for (let i = 0; i < arr.length; i++) {
  65. if (currentSequence.length === 0 || arr[i] === currentSequence[currentSequence.length - 1] + 1) {
  66. currentSequence.push(arr[i]);
  67. } else {
  68. if (currentSequence.length > 1) {
  69. result.push(currentSequence);
  70. }
  71. currentSequence = [arr[i]];
  72. }
  73. }
  74. if (currentSequence.length > 1) {
  75. result.push(currentSequence);
  76. }
  77. return result;
  78. }
  79. /*eg:const arr = [2, 4,2, 5, 3, 6, 9,9,10,11,];
  80. const combinations = this.findSequentialCombinations(arr);
  81. if (combinations.length > 0) {
  82. console.log("所有可能的连续顺序组合为:");
  83. combinations.forEach(combination => {
  84. console.log(combination);
  85. });
  86. } else {
  87. console.log("无法找到连续顺序组合");
  88. }*/
  89. /**数组中删除一个合条件的*/
  90. static DeleteOneItem(list, check) {
  91. let length = list.length;
  92. for (let i = 0; i < length; i++) {
  93. if (check(list[i])) {
  94. return list.splice(i, 1)[0]; //i--;
  95. //length--;
  96. }
  97. }
  98. return null;
  99. }
  100. /**插入排序(适用于差异不会很大,相对有序的数据)Array.sort() 快速排序 算法更适用于混乱无章的数据 */
  101. static InsertionSort(array) {
  102. const count = array.length;
  103. if (count <= 1) return;
  104. let t1;
  105. let t2;
  106. for (let i = 1; i < count; i++) {
  107. t1 = array[i];
  108. let j;
  109. for (j = i; j > 0 && t1.sortValue > (t2 = array[j - 1]).sortValue; j--) {
  110. array[j] = t2;
  111. }
  112. array[j] = t1;
  113. }
  114. } // 元素排序
  115. /*示例
  116. 负数在前
  117. const checkMinusNumber = function (val: number) {
  118. return val > 0;
  119. };
  120. const arr = [2, 4, 5, 6, 7, -8, -10 - 12, -2];
  121. adjustArrayOrder.reorder(arr, checkMinusNumber);
  122. console.log(arr);
  123. */
  124. static reorder(arr, checkFun) {
  125. let end = arr.length - 1;
  126. let begin = 0;
  127. while (begin < end) {
  128. // 向后移动begin
  129. while (begin < end && !checkFun(arr[begin])) {
  130. begin++;
  131. } // 向前移动end
  132. while (begin < end && checkFun(arr[end])) {
  133. end--;
  134. } // begin与end都指向了正确的位置
  135. if (begin < end) {
  136. // 交换两个元素的顺序
  137. [arr[begin], arr[end]] = [arr[end], arr[begin]];
  138. }
  139. }
  140. } //冒泡排序
  141. /// <summary>
  142. /// 各种类型冒泡排序比
  143. /// </summary>/// 例子:
  144. /// CommonSort<int>(new int[]{2,3,1,45,123,4},compare)
  145. /// bool compare(int a,int b){
  146. /// if(a>b)return true;
  147. /// reutn false;
  148. /// }
  149. /// <param name="sortArray"></param>
  150. /// <param name="compareMethod"></param>
  151. /// <typeparam name="T"></typeparam>
  152. static CommonSort(sortArray, compareMethod) {
  153. let swapped = true;
  154. do {
  155. swapped = false;
  156. for (let i = 0; i < sortArray.length - 1; i++) {
  157. if (compareMethod(sortArray[i], sortArray[i + 1])) {
  158. let temp = sortArray[i];
  159. sortArray[i] = sortArray[i + 1];
  160. sortArray[i + 1] = temp;
  161. swapped = true;
  162. }
  163. }
  164. } while (swapped);
  165. }
  166. /**归并排序 */
  167. /*var arr: number[] = [];
  168. for (var i: number = 0; i < 1000; i++) {
  169. arr.push(Math.floor(1000 - i));//生成降序的数组
  170. }
  171. MergeSort(arr, 0, arr.length);//调用归并排序算法*/
  172. //拆分数组 分
  173. static MergeSort(arr, lo, hi) {
  174. if (hi - lo < 2) return; //单个元素无需考虑
  175. var mi = lo + hi >> 1; //已中点为界 或者改成Math.floor((lo + hi) / 2)
  176. this.MergeSort(arr, lo, mi); //对左边排序
  177. this.MergeSort(arr, mi, hi); //对右边排序
  178. this.merge(arr, lo, mi, hi); //归并
  179. } //归并算法实现 合
  180. static merge(arr, lo, mi, hi) {
  181. var A = arr.slice(lo, hi); //A[lo, hi)=arr[lo, hi)
  182. var lb = mi - lo;
  183. var B = new Array(lb);
  184. for (var i = 0; i < lb; B[i] = A[i++]); //复制左子向量B[0, lb) = arr[lo, mi)
  185. var lc = hi - mi;
  186. var C = arr.slice(mi, hi); //后子向量C[0,lc) = arr[mi, hi)
  187. for (var i = 0, j = 0, k = 0; j < lb;) {
  188. //反复冲B和C中取出更小者
  189. if (k < lc && C[k] < B[j]) {
  190. //将其归入A中
  191. A[i++] = C[k++];
  192. }
  193. if (lc <= k || B[j] <= C[k]) {
  194. A[i++] = B[j++];
  195. }
  196. }
  197. for (var i = 0; i < A.length; arr[lo + i] = A[i++]); //把A中的值赋给原来的数组
  198. B.length = 0;
  199. C.length = 0;
  200. A.length = 0;
  201. }
  202. });
  203. _cclegacy._RF.pop();
  204. _crd = false;
  205. }
  206. };
  207. });
  208. //# sourceMappingURL=6b45817391fda8032e9c3052f72099ae80b977e5.js.map