System.register(["cc"], function (_export, _context) {
"use strict";
var _cclegacy, ArrayUtil, _crd;
_export("default", void 0);
return {
setters: [function (_cc) {
_cclegacy = _cc.cclegacy;
}],
execute: function () {
_crd = true;
_cclegacy._RF.push({}, "83341COeitPRIHcw18VS7g3", "ArrayUtil", undefined);
_export("default", ArrayUtil = class ArrayUtil {
/**随机打乱一个数组 */
static shuffleArray(array) {
var currentIndex = array.length;
var temporaryValue;
var randomIndex; // While there remain elements to shuffle...
while (currentIndex !== 0) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--; // And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
} // Fisher-Yates 洗牌算法
//const originalArray = [1, 2, 3, 4, 5];
//const shuffledArray = shuffleArray([...originalArray]);
static shuffleArray2(array) {
for (var i = array.length - 1; i > 0; i--) {
// 生成一个随机索引
var j = Math.floor(Math.random() * (i + 1)); // 交换元素
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
/**合并两个数组元素,移除相同的 */
static MergeAndRemoveDuplicates(arr1, arr2) {
var merged = [...arr1, ...arr2]; // 合并两个数组
var uniqueValues = Array.from(new Set(merged)); // 去重
return uniqueValues;
}
/**排除数组1在数组2里有的元素,返回新数组*/
static ExcludeElements(array1, array2) {
var set = new Set(array2); // 将 array2 转换为 Set
return array1.filter(item => !set.has(item));
}
/**检测数组元素是否能满足顺序的组合*/
static checkSequentialCombination(arr) {
var sortedArr = arr.slice().sort((a, b) => a - b);
for (var i = 0; i < sortedArr.length - 1; i++) {
if (sortedArr[i] + 1 !== sortedArr[i + 1]) {
return [];
}
}
return sortedArr;
}
/**从一个数组中找出是否有连续的组合*/
static findSequentialCombinations(arr) {
var result = [];
arr.sort((a, b) => a - b);
var currentSequence = [];
for (var i = 0; i < arr.length; i++) {
if (currentSequence.length === 0 || arr[i] === currentSequence[currentSequence.length - 1] + 1) {
currentSequence.push(arr[i]);
} else {
if (currentSequence.length > 1) {
result.push(currentSequence);
}
currentSequence = [arr[i]];
}
}
if (currentSequence.length > 1) {
result.push(currentSequence);
}
return result;
}
/*eg:const arr = [2, 4,2, 5, 3, 6, 9,9,10,11,];
const combinations = this.findSequentialCombinations(arr);
if (combinations.length > 0) {
console.log("所有可能的连续顺序组合为:");
combinations.forEach(combination => {
console.log(combination);
});
} else {
console.log("无法找到连续顺序组合");
}*/
/**数组中删除一个合条件的*/
static DeleteOneItem(list, check) {
var length = list.length;
for (var i = 0; i < length; i++) {
if (check(list[i])) {
return list.splice(i, 1)[0]; //i--;
//length--;
}
}
return null;
}
/**插入排序(适用于差异不会很大,相对有序的数据)Array.sort() 快速排序 算法更适用于混乱无章的数据 */
static InsertionSort(array) {
var count = array.length;
if (count <= 1) return;
var t1;
var t2;
for (var i = 1; i < count; i++) {
t1 = array[i];
var j = void 0;
for (j = i; j > 0 && t1.sortValue > (t2 = array[j - 1]).sortValue; j--) {
array[j] = t2;
}
array[j] = t1;
}
} // 元素排序
/*示例
负数在前
const checkMinusNumber = function (val: number) {
return val > 0;
};
const arr = [2, 4, 5, 6, 7, -8, -10 - 12, -2];
adjustArrayOrder.reorder(arr, checkMinusNumber);
console.log(arr);
*/
static reorder(arr, checkFun) {
var end = arr.length - 1;
var begin = 0;
while (begin < end) {
// 向后移动begin
while (begin < end && !checkFun(arr[begin])) {
begin++;
} // 向前移动end
while (begin < end && checkFun(arr[end])) {
end--;
} // begin与end都指向了正确的位置
if (begin < end) {
// 交换两个元素的顺序
[arr[begin], arr[end]] = [arr[end], arr[begin]];
}
}
} //冒泡排序
///
/// 各种类型冒泡排序比
/// /// 例子:
/// CommonSort(new int[]{2,3,1,45,123,4},compare)
/// bool compare(int a,int b){
/// if(a>b)return true;
/// reutn false;
/// }
///
///
///
static CommonSort(sortArray, compareMethod) {
var swapped = true;
do {
swapped = false;
for (var i = 0; i < sortArray.length - 1; i++) {
if (compareMethod(sortArray[i], sortArray[i + 1])) {
var temp = sortArray[i];
sortArray[i] = sortArray[i + 1];
sortArray[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
/**归并排序 */
/*var arr: number[] = [];
for (var i: number = 0; i < 1000; i++) {
arr.push(Math.floor(1000 - i));//生成降序的数组
}
MergeSort(arr, 0, arr.length);//调用归并排序算法*/
//拆分数组 分
static MergeSort(arr, lo, hi) {
if (hi - lo < 2) return; //单个元素无需考虑
var mi = lo + hi >> 1; //已中点为界 或者改成Math.floor((lo + hi) / 2)
this.MergeSort(arr, lo, mi); //对左边排序
this.MergeSort(arr, mi, hi); //对右边排序
this.merge(arr, lo, mi, hi); //归并
} //归并算法实现 合
static merge(arr, lo, mi, hi) {
var A = arr.slice(lo, hi); //A[lo, hi)=arr[lo, hi)
var lb = mi - lo;
var B = new Array(lb);
for (var i = 0; i < lb; B[i] = A[i++]); //复制左子向量B[0, lb) = arr[lo, mi)
var lc = hi - mi;
var C = arr.slice(mi, hi); //后子向量C[0,lc) = arr[mi, hi)
for (var i = 0, j = 0, k = 0; j < lb;) {
//反复冲B和C中取出更小者
if (k < lc && C[k] < B[j]) {
//将其归入A中
A[i++] = C[k++];
}
if (lc <= k || B[j] <= C[k]) {
A[i++] = B[j++];
}
}
for (var i = 0; i < A.length; arr[lo + i] = A[i++]); //把A中的值赋给原来的数组
B.length = 0;
C.length = 0;
A.length = 0;
}
});
_cclegacy._RF.pop();
_crd = false;
}
};
});
//# sourceMappingURL=beac6c998ab6f9e58b4b8eec74e6a02573711aaa.js.map