1# 非线性容器PlainArray 2 3>  **说明:** 4> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 5 6PlainArray可用于存储具有关联关系的key-value键值对集合,存储元素中key值唯一,key值类型为number类型,每个key对应一个value。 7 8PlainArray依据泛型定义,采用轻量级结构,集合中key值的查找依赖于二分查找算法,然后映射到其他数组中的value值。 9 10PlainArray和[LightWeightMap](js-apis-lightweightmap.md)都是用来存储键值对,且均采用轻量级结构,但PlainArray的key值类型只能为number类型。 11 12**推荐使用场景:** 当需要存储key值为number类型的键值对时,可以使用PlainArray。 13 14## 导入模块 15 16```ts 17import PlainArray from '@ohos.util.PlainArray'; 18``` 19 20 21 22## PlainArray 23 24### 属性 25 26**系统能力:** SystemCapability.Utils.Lang 27 28| 名称 | 参数类型 | 可读 | 可写 | 说明 | 29| -------- | -------- | -------- | -------- | -------- | 30| length | number | 是 | 否 | PlainArray的元素个数。 | 31 32 33### constructor 34 35constructor() 36 37PlainArray的构造函数。 38 39**系统能力:** SystemCapability.Utils.Lang 40 41**示例:** 42 43```ts 44let plainArray = new PlainArray(); 45``` 46 47 48### isEmpty 49 50isEmpty(): boolean 51 52判断该容器是否为空。 53 54**系统能力:** SystemCapability.Utils.Lang 55 56**返回值:** 57 58| 类型 | 说明 | 59| -------- | -------- | 60| boolean | 为空返回true, 不为空返回false。 | 61 62**示例:** 63 64```ts 65const plainArray = new PlainArray(); 66let result = plainArray.isEmpty(); 67``` 68 69 70### has 71 72has(key: number): boolean 73 74判断此容器中是否含有该指定key。 75 76**系统能力:** SystemCapability.Utils.Lang 77 78**参数:** 79 80| 参数名 | 类型 | 必填 | 说明 | 81| -------- | -------- | -------- | -------- | 82| key | number | 是 | 指定key。 | 83 84**返回值:** 85 86| 类型 | 说明 | 87| -------- | -------- | 88| boolean | 包含指定key返回true,否则返回false。 | 89 90**示例:** 91 92```ts 93let plainArray = new PlainArray(); 94plainArray.has(1); 95plainArray.add(1, "sddfhf"); 96let result1 = plainArray.has(1); 97``` 98 99 100### get 101 102get(key: number): T 103 104获取指定key所对应的value。 105 106**系统能力:** SystemCapability.Utils.Lang 107 108**参数:** 109 110| 参数名 | 类型 | 必填 | 说明 | 111| -------- | -------- | -------- | -------- | 112| key | number | 是 | 查找的指定key。 | 113 114**返回值:** 115 116| 类型 | 说明 | 117| -------- | -------- | 118| T | 返回key映射的value值。 | 119 120**示例:** 121 122```ts 123let plainArray = new PlainArray(); 124plainArray.add(1, "sddfhf"); 125plainArray.add(2, "sffdfhf"); 126let result = plainArray.get(1); 127``` 128 129 130### getIndexOfKey 131 132getIndexOfKey(key: number): number 133 134查找指定key第一次出现的下标值,如果没有找到该key返回-1。 135 136**系统能力:** SystemCapability.Utils.Lang 137 138**参数:** 139 140| 参数名 | 类型 | 必填 | 说明 | 141| -------- | -------- | -------- | -------- | 142| key | number | 是 | 指定key。 | 143 144**返回值:** 145 146| 类型 | 说明 | 147| -------- | -------- | 148| number | 返回指定key第一次出现时的下标值,查找失败返回-1。 | 149 150**示例:** 151 152```ts 153let plainArray = new PlainArray(); 154plainArray.add(1, "sddfhf"); 155plainArray.add(2, "sffdfhf"); 156let result = plainArray.getIndexOfKey(2); 157``` 158 159 160### getIndexOfValue 161 162getIndexOfValue(value: T): number 163 164查找指定value元素第一次出现的下标值,如果没有找到该value元素返回-1。 165 166**系统能力:** SystemCapability.Utils.Lang 167 168**参数:** 169 170| 参数名 | 类型 | 必填 | 说明 | 171| -------- | -------- | -------- | -------- | 172| value | T | 是 | 指定value元素。 | 173 174**返回值:** 175 176| 类型 | 说明 | 177| -------- | -------- | 178| number | 返回指定value元素第一次出现时的下标值,查找失败返回-1。 | 179 180**示例:** 181 182```ts 183let plainArray = new PlainArray(); 184plainArray.add(1, "sddfhf"); 185plainArray.add(2, "sffdfhf"); 186let result = plainArray.getIndexOfValue("sddfhf"); 187``` 188 189 190### getKeyAt 191 192getKeyAt(index: number): number 193 194查找指定下标的元素键值对中key值。 195 196**系统能力:** SystemCapability.Utils.Lang 197 198**参数:** 199 200| 参数名 | 类型 | 必填 | 说明 | 201| -------- | -------- | -------- | -------- | 202| index | number | 是 | 指定下标。 | 203 204**返回值:** 205 206| 类型 | 说明 | 207| -------- | -------- | 208| number | 返回该下标对应的元素键值对中key值,失败返回-1。 | 209 210**示例:** 211 212```ts 213let plainArray = new PlainArray(); 214plainArray.add(1, "sddfhf"); 215plainArray.add(2, "sffdfhf"); 216let result = plainArray.getKeyAt(1); 217``` 218 219### getValueAt 220 221getValueAt(index: number): T 222 223查找指定下标元素键值对中Value值,否则返回undefined。 224 225**系统能力:** SystemCapability.Utils.Lang 226 227**参数:** 228 229 | 参数名 | 类型 | 必填 | 说明 | 230 | -------- | -------- | -------- | -------- | 231 | index | number | 是 | 指定下标。 | 232 233**返回值:** 234 235 | 类型 | 说明 | 236 | -------- | -------- | 237 | T | 返回该下标对应的元素键值对中key值,失败返回undefined。 | 238 239**示例:** 240 241 ```ts 242 let plainArray = new PlainArray(); 243 plainArray.add(1, "sddfhf"); 244 plainArray.add(2, "sffdfhf"); 245 let result = plainArray.getKeyAt(1); 246 ``` 247 248### clone 249 250clone(): PlainArray<T> 251 252克隆一个实例,并返回克隆后的实例。修改克隆后的实例并不会影响原实例。 253 254**系统能力:** SystemCapability.Utils.Lang 255 256**返回值:** 257 258| 类型 | 说明 | 259| -------- | -------- | 260| PlainArray<T> | 返回新的对象实例。 | 261 262**示例:** 263 264```ts 265let plainArray = new PlainArray(); 266plainArray.add(1, "sddfhf"); 267plainArray.add(2, "sffdfhf"); 268let newPlainArray = plainArray.clone(); 269``` 270 271 272### add 273 274add(key: number, value: T): void 275 276向容器中添加一组数据。 277 278**系统能力:** SystemCapability.Utils.Lang 279 280**参数:** 281 282| 参数名 | 类型 | 必填 | 说明 | 283| -------- | -------- | -------- | -------- | 284| key | number | 是 | 添加成员数据的键名。 | 285| value | T | 是 | 添加成员数据的值。 | 286 287**示例:** 288 289```ts 290let plainArray = new PlainArray(); 291plainArray.add(1, "sddfhf"); 292``` 293 294 295### remove 296 297remove(key: number): T 298 299删除指定key对应元素。 300 301**系统能力:** SystemCapability.Utils.Lang 302 303**参数:** 304 305| 参数名 | 类型 | 必填 | 说明 | 306| -------- | -------- | -------- | -------- | 307| key | number | 是 | 指定key。 | 308 309**返回值:** 310 311| 类型 | 说明 | 312| -------- | -------- | 313| T | 返回删除元素的值。 | 314 315**示例:** 316 317```ts 318let plainArray = new PlainArray(); 319plainArray.add(1, "sddfhf"); 320plainArray.add(2, "sffdfhf"); 321plainArray.remove(2); 322let result = plainArray.remove(2); 323``` 324 325 326### removeAt 327 328removeAt(index: number): T 329 330删除指定下标对应的元素。 331 332**系统能力:** SystemCapability.Utils.Lang 333 334**参数:** 335 336| 参数名 | 类型 | 必填 | 说明 | 337| -------- | -------- | -------- | -------- | 338| index | number | 是 | 指定元素下标。 | 339 340**返回值:** 341 342| 类型 | 说明 | 343| -------- | -------- | 344| T | 返回删除的元素。 | 345 346**示例:** 347 348```ts 349let plainArray = new PlainArray(); 350plainArray.add(1, "sddfhf"); 351plainArray.add(2, "sffdfhf"); 352plainArray.removeAt(1); 353let result = plainArray.removeAt(1); 354``` 355 356 357### removeRangeFrom 358 359removeRangeFrom(index: number, size: number): number 360 361删除一定范围内的元素。 362 363**系统能力:** SystemCapability.Utils.Lang 364 365**参数:** 366 367| 参数名 | 类型 | 必填 | 说明 | 368| -------- | -------- | -------- | -------- | 369| index | number | 是 | 删除元素的起始下标。 | 370| size | number | 是 | 期望删除元素个数。 | 371 372**返回值:** 373 374| 类型 | 说明 | 375| -------- | -------- | 376| number | 实际删除元素个数。 | 377 378**示例:** 379 380```ts 381let plainArray = new PlainArray(); 382plainArray.add(1, "sddfhf"); 383plainArray.add(2, "sffdfhf"); 384let result = plainArray.removeRangeFrom(1, 3); 385``` 386 387 388### setValueAt 389 390setValueAt(index: number, value: T): void 391 392替换容器中指定下标对应键值对中的键值。 393 394**系统能力:** SystemCapability.Utils.Lang 395 396**参数:** 397 398| 参数名 | 类型 | 必填 | 说明 | 399| -------- | -------- | -------- | -------- | 400| index | number | 是 | 指定替换数据下标。 | 401| value | T | 是 | 替换键值对中的值。 | 402 403**示例:** 404 405```ts 406let plainArray = new PlainArray(); 407plainArray.add(1, "sddfhf"); 408plainArray.add(2, "sffdfhf"); 409plainArray.setValueAt(1, 3546); 410``` 411 412 413### toString 414 415toString(): String 416 417获取包含容器中所有键和值的字符串。 418 419**系统能力:** SystemCapability.Utils.Lang 420 421**返回值:** 422 423| 类型 | 说明 | 424| -------- | -------- | 425| String | 返回对应字符串。 | 426 427**示例:** 428 429```ts 430let plainArray = new PlainArray(); 431plainArray.add(1, "sddfhf"); 432plainArray.add(2, "sffdfhf"); 433let result = plainArray.toString(); 434``` 435 436 437### clear 438 439clear(): void 440 441清除容器中的所有元素,并把length置为0。 442 443**系统能力:** SystemCapability.Utils.Lang 444 445**示例:** 446 447```ts 448let plainArray = new PlainArray(); 449plainArray.add(1, "sddfhf"); 450plainArray.add(2, "sffdfhf"); 451plainArray.clear(); 452``` 453 454 455### forEach 456 457forEach(callbackfn: (value: T, index?: number, PlainArray?: PlainArray<T>) => void, thisArg?: Object): void 458 459通过回调函数来遍历实例对象上的元素以及元素对应的下标。 460 461**系统能力:** SystemCapability.Utils.Lang 462 463**参数:** 464 465| 参数名 | 类型 | 必填 | 说明 | 466| -------- | -------- | -------- | -------- | 467| callbackfn | function | 是 | 回调函数。 | 468| thisArg | Object | 否 | callbackfn被调用时用作this值。 | 469 470callbackfn的参数说明: 471| 参数名 | 类型 | 必填 | 说明 | 472| -------- | -------- | -------- | -------- | 473| value | T | 是 | 当前遍历到的元素键值对的值。 | 474| index | number | 否 | 当前遍历到的元素键值对的键。 | 475| PlainArray | PlainArray<T>| 否 | 当前调用forEach方法的实例对象。 | 476 477**示例:** 478 479```ts 480let plainArray = new PlainArray(); 481plainArray.add(1, "sddfhf"); 482plainArray.add(2, "sffdfhf"); 483plainArray.forEach((value, index) => { 484 console.log("value:" + value, "index:" + index); 485}); 486``` 487 488 489### [Symbol.iterator] 490 491[Symbol.iterator]\(): IterableIterator<[number, T]> 492 493返回一个迭代器,迭代器的每一项都是一个 JavaScript对象,并返回该对象。 494 495**系统能力:** SystemCapability.Utils.Lang 496 497**返回值:** 498 499| 类型 | 说明 | 500| -------- | -------- | 501| IterableIterator<[number, T]> | 返回一个迭代器。 | 502 503**示例:** 504 505```ts 506let plainArray = new PlainArray(); 507plainArray.add(1, "sddfhf"); 508plainArray.add(2, "sffdfhf"); 509 510// 使用方法一: 511for (let item of plainArray) { 512 console.log("index:" + item[0]); 513 console.log("value:" + item[1]); 514} 515 516// 使用方法二: 517let iter = plainArray[Symbol.iterator](); 518let temp = iter.next().value; 519while(temp != undefined) { 520 console.log("index:" + temp[0]); 521 console.log("value:" + temp[1]); 522 temp = iter.next().value; 523} 524```