13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ciimport * as crypto from 'crypto'; 173af6ab5fSopenharmony_ci 183af6ab5fSopenharmony_ciexport class ListUtil { 193af6ab5fSopenharmony_ci public static readonly MAX_INIT_LEN: number = 0xFFFF; 203af6ab5fSopenharmony_ci 213af6ab5fSopenharmony_ci /** 223af6ab5fSopenharmony_ci * get a list with element number filled for each element 233af6ab5fSopenharmony_ci * @param length: list length you want init. 243af6ab5fSopenharmony_ci */ 253af6ab5fSopenharmony_ci public static getInitList(length: number): number[] { 263af6ab5fSopenharmony_ci if (isNaN(length) || length < 0 || length > this.MAX_INIT_LEN) { 273af6ab5fSopenharmony_ci console.error(`array init length is invalid, should in range: [0, ${this.MAX_INIT_LEN}]`); 283af6ab5fSopenharmony_ci return []; 293af6ab5fSopenharmony_ci } 303af6ab5fSopenharmony_ci 313af6ab5fSopenharmony_ci return Array(length).fill(null).map((_, h) => h); 323af6ab5fSopenharmony_ci } 333af6ab5fSopenharmony_ci 343af6ab5fSopenharmony_ci /** 353af6ab5fSopenharmony_ci * shuffle list 363af6ab5fSopenharmony_ci * @param originList: list to be shuffled 373af6ab5fSopenharmony_ci */ 383af6ab5fSopenharmony_ci public static shuffle(originList: number[]): void { 393af6ab5fSopenharmony_ci if (!originList) { 403af6ab5fSopenharmony_ci return; 413af6ab5fSopenharmony_ci } 423af6ab5fSopenharmony_ci 433af6ab5fSopenharmony_ci for (let i = originList.length; i > 0; i--) { 443af6ab5fSopenharmony_ci let j = crypto.randomInt(originList.length); 453af6ab5fSopenharmony_ci [originList[i - 1], originList[j]] = [originList[j], originList[i - 1]]; 463af6ab5fSopenharmony_ci } 473af6ab5fSopenharmony_ci } 483af6ab5fSopenharmony_ci 493af6ab5fSopenharmony_ci /** 503af6ab5fSopenharmony_ci * merge two list to one list of unique element 513af6ab5fSopenharmony_ci * @param listA 523af6ab5fSopenharmony_ci * @param listB 533af6ab5fSopenharmony_ci * @param listC 543af6ab5fSopenharmony_ci */ 553af6ab5fSopenharmony_ci public static uniqueMergeList(listA: string[], listB: string[], listC?: string[]): string[] { 563af6ab5fSopenharmony_ci const firstList: string[] = listA ? listA : []; 573af6ab5fSopenharmony_ci const secondList: string[] = listB ? listB : []; 583af6ab5fSopenharmony_ci const thirdList: string[] = listC ? listC : []; 593af6ab5fSopenharmony_ci 603af6ab5fSopenharmony_ci const tmpList: string[] = [...firstList, ...secondList, ...thirdList]; 613af6ab5fSopenharmony_ci const elementSet: Set<string> = new Set<string>(tmpList); 623af6ab5fSopenharmony_ci return Array.from(elementSet); 633af6ab5fSopenharmony_ci } 643af6ab5fSopenharmony_ci} 65