pub const ARRAY_UTILS: &str = "// stdlib/array_utils.aether\n// Aether \u{6570}\u{7ec4}\u{5de5}\u{5177}\u{5e93}\n// \u{63d0}\u{4f9b}\u{4e30}\u{5bcc}\u{7684}\u{6570}\u{7ec4}\u{64cd}\u{4f5c}\u{51fd}\u{6570}\n\n// ==================== \u{6570}\u{7ec4}\u{53bb}\u{91cd} ====================\n\n// \u{79fb}\u{9664}\u{6570}\u{7ec4}\u{4e2d}\u{7684}\u{91cd}\u{590d}\u{5143}\u{7d20}\nFunc ARR_UNIQUE(ARR) {\n Set RESULT []\n Set LEN_ LEN(ARR)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM ARR[I]\n Set FOUND False\n Set J 0\n Set RESULT_LEN LEN(RESULT)\n \n While (J < RESULT_LEN) {\n If (RESULT[J] == ITEM) {\n Set FOUND True\n Break\n }\n Set J (J + 1)\n }\n \n If (!FOUND) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n \n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{6241}\u{5e73}\u{5316} ====================\n\n// \u{5c06}\u{5d4c}\u{5957}\u{6570}\u{7ec4}\u{6241}\u{5e73}\u{5316}\u{4e00}\u{5c42}\nFunc ARR_FLATTEN(ARR) {\n Set RESULT []\n Set LEN_ LEN(ARR)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM ARR[I]\n Set ITEM_TYPE TYPE(ITEM)\n \n If (ITEM_TYPE == \"Array\") {\n // \u{5982}\u{679c}\u{662f}\u{6570}\u{7ec4}\u{ff0c}\u{5c55}\u{5f00}\u{4e00}\u{5c42}\n Set INNER_LEN LEN(ITEM)\n Set J 0\n While (J < INNER_LEN) {\n Set RESULT PUSH(RESULT, ITEM[J])\n Set J (J + 1)\n }\n } Else {\n Set RESULT PUSH(RESULT, ITEM)\n }\n \n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{9012}\u{5f52}\u{6241}\u{5e73}\u{5316}\u{6570}\u{7ec4}\u{ff08}\u{6240}\u{6709}\u{5c42}\u{7ea7}\u{ff09}\nFunc ARR_FLATTEN_DEEP(ARR) {\n Set RESULT []\n Set LEN_ LEN(ARR)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM ARR[I]\n Set ITEM_TYPE TYPE(ITEM)\n \n If (ITEM_TYPE == \"Array\") {\n // \u{9012}\u{5f52}\u{6241}\u{5e73}\u{5316}\n Set FLATTENED ARR_FLATTEN_DEEP(ITEM)\n Set FLAT_LEN LEN(FLATTENED)\n Set J 0\n While (J < FLAT_LEN) {\n Set RESULT PUSH(RESULT, FLATTENED[J])\n Set J (J + 1)\n }\n } Else {\n Set RESULT PUSH(RESULT, ITEM)\n }\n \n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{5206}\u{5757} ====================\n\n// \u{5c06}\u{6570}\u{7ec4}\u{5206}\u{5272}\u{6210}\u{6307}\u{5b9a}\u{5927}\u{5c0f}\u{7684}\u{5757}\nFunc ARR_CHUNK(ARR, size) {\n If (size <= 0) {\n Return []\n }\n \n Set RESULT []\n Set LEN_ LEN(ARR)\n Set I 0\n \n While (I < LEN_) {\n Set CHUNK []\n Set J 0\n \n While (J < size && (I + J) < LEN_) {\n Set CHUNK PUSH(CHUNK, ARR[I + J])\n Set J (J + 1)\n }\n \n Set RESULT PUSH(RESULT, CHUNK)\n Set I (I + size)\n }\n \n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{538b}\u{7f29} ====================\n\n// \u{5c06}\u{591a}\u{4e2a}\u{6570}\u{7ec4}\u{7684}\u{5bf9}\u{5e94}\u{5143}\u{7d20}\u{7ec4}\u{5408}\u{6210}\u{5143}\u{7ec4}\u{6570}\u{7ec4}\nFunc ARR_ZIP(ARR_1, ARR_2) {\n Set RESULT []\n Set LEN_1 LEN(ARR_1)\n Set LEN_2 LEN(ARR_2)\n Set MIN_LEN LEN_1\n \n If (LEN_2 < MIN_LEN) {\n Set MIN_LEN LEN_2\n }\n \n Set I 0\n While (I < MIN_LEN) {\n Set PAIR []\n Set PAIR PUSH(PAIR, ARR_1[I])\n Set PAIR PUSH(PAIR, ARR_2[I])\n Set RESULT PUSH(RESULT, PAIR)\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{5206}\u{533a} ====================\n\n// \u{6839}\u{636e}\u{6761}\u{4ef6}\u{5c06}\u{6570}\u{7ec4}\u{5206}\u{4e3a}\u{4e24}\u{90e8}\u{5206}\n// \u{6761}\u{4ef6}\u{4e3a}\u{5b57}\u{7b26}\u{4e32}\u{6bd4}\u{8f83}\u{64cd}\u{4f5c}\u{ff0c}\u{4f8b}\u{5982} \"> 5\"\nFunc ARR_PARTITION(ARR, CONDITION_OP, condition_value) {\n Set TRUE_PART []\n Set FALSE_PART []\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n Set ITEM ARR[I]\n Set MATCHES False\n \n If (CONDITION_OP == \">\") {\n Set MATCHES (ITEM > condition_value)\n } Elif (CONDITION_OP == \">=\") {\n Set MATCHES (ITEM >= condition_value)\n } Elif (CONDITION_OP == \"<\") {\n Set MATCHES (ITEM < condition_value)\n } Elif (CONDITION_OP == \"<=\") {\n Set MATCHES (ITEM <= condition_value)\n } Elif (CONDITION_OP == \"==\") {\n Set MATCHES (ITEM == condition_value)\n } Elif (CONDITION_OP == \"!=\") {\n Set MATCHES (ITEM != condition_value)\n }\n \n If (MATCHES) {\n Set TRUE_PART PUSH(TRUE_PART, ITEM)\n } Else {\n Set FALSE_PART PUSH(FALSE_PART, ITEM)\n }\n \n Set I (I + 1)\n }\n \n Set RESULT []\n Set RESULT PUSH(RESULT, TRUE_PART)\n Set RESULT PUSH(RESULT, FALSE_PART)\n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{67e5}\u{627e} ====================\n\n// \u{67e5}\u{627e}\u{5143}\u{7d20}\u{5728}\u{6570}\u{7ec4}\u{4e2d}\u{7684}\u{7d22}\u{5f15}\u{ff0c}\u{672a}\u{627e}\u{5230}\u{8fd4}\u{56de} -1\nFunc ARR_INDEX_OF(ARR, VALUE) {\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n If (ARR[I] == VALUE) {\n Return I\n }\n Set I (I + 1)\n }\n \n Return -1\n}\n\n// \u{67e5}\u{627e}\u{5143}\u{7d20}\u{5728}\u{6570}\u{7ec4}\u{4e2d}\u{6700}\u{540e}\u{4e00}\u{6b21}\u{51fa}\u{73b0}\u{7684}\u{7d22}\u{5f15}\nFunc ARR_LAST_INDEX_OF(ARR, VALUE) {\n Set LEN LEN(ARR)\n Set I (LEN - 1)\n \n While (I >= 0) {\n If (ARR[I] == VALUE) {\n Return I\n }\n Set I (I - 1)\n }\n \n Return -1\n}\n\n// \u{68c0}\u{67e5}\u{6570}\u{7ec4}\u{662f}\u{5426}\u{5305}\u{542b}\u{67d0}\u{4e2a}\u{503c}\nFunc ARR_CONTAINS(ARR, VALUE) {\n Set INDEX ARR_INDEX_OF(ARR, VALUE)\n Return (INDEX != -1)\n}\n\n// ==================== \u{6570}\u{7ec4}\u{64cd}\u{4f5c} ====================\n\n// \u{53cd}\u{8f6c}\u{6570}\u{7ec4}\nFunc ARR_REVERSE(ARR) {\n Set RESULT []\n Set LEN LEN(ARR)\n Set I (LEN - 1)\n \n While (I >= 0) {\n Set RESULT PUSH(RESULT, ARR[I])\n Set I (I - 1)\n }\n \n Return RESULT\n}\n\n// \u{6570}\u{7ec4}\u{5207}\u{7247}\u{ff08}\u{7c7b}\u{4f3c} Python \u{7684} SLICE\u{ff09}\nFunc ARR_SLICE(ARR, START, END) {\n Set RESULT []\n Set LEN LEN(ARR)\n \n // \u{5904}\u{7406}\u{8d1f}\u{6570}\u{7d22}\u{5f15}\n If (START < 0) {\n Set START (LEN + START)\n }\n If (END < 0) {\n Set END (LEN + END)\n }\n \n // \u{8fb9}\u{754c}\u{68c0}\u{67e5}\n If (START < 0) {\n Set START 0\n }\n If (END > LEN) {\n Set END LEN\n }\n If (START >= END) {\n Return RESULT\n }\n \n Set I START\n While (I < END) {\n Set RESULT PUSH(RESULT, ARR[I])\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{83b7}\u{53d6}\u{6570}\u{7ec4}\u{7684}\u{524d} n \u{4e2a}\u{5143}\u{7d20}\nFunc ARR_TAKE(ARR, n) {\n Return ARR_SLICE(ARR, 0, n)\n}\n\n// \u{8df3}\u{8fc7}\u{6570}\u{7ec4}\u{7684}\u{524d} n \u{4e2a}\u{5143}\u{7d20}\nFunc ARR_SKIP(ARR, n) {\n Set LEN LEN(ARR)\n Return ARR_SLICE(ARR, n, LEN)\n}\n\n// ==================== \u{6570}\u{7ec4}\u{805a}\u{5408} ====================\n\n// \u{8ba1}\u{7b97}\u{6570}\u{7ec4}\u{5143}\u{7d20}\u{7684}\u{603b}\u{548c}\nFunc ARR_SUM(ARR) {\n Set SUM 0\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n Set SUM (SUM + ARR[I])\n Set I (I + 1)\n }\n \n Return SUM\n}\n\n// \u{8ba1}\u{7b97}\u{6570}\u{7ec4}\u{5143}\u{7d20}\u{7684}\u{4e58}\u{79ef}\nFunc ARR_PRODUCT(ARR) {\n Set LEN LEN(ARR)\n \n If (LEN == 0) {\n Return 0\n }\n \n Set PRODUCT ARR[0]\n Set I 1\n \n While (I < LEN) {\n Set PRODUCT (PRODUCT * ARR[I])\n Set I (I + 1)\n }\n \n Return PRODUCT\n}\n\n// \u{67e5}\u{627e}\u{6570}\u{7ec4}\u{4e2d}\u{7684}\u{6700}\u{5927}\u{503c}\nFunc ARR_MAX(ARR) {\n Set LEN LEN(ARR)\n \n If (LEN == 0) {\n Return Null\n }\n \n Set MAX_VAL ARR[0]\n Set I 1\n \n While (I < LEN) {\n Set CURRENT ARR[I]\n If (CURRENT > MAX_VAL) {\n Set MAX_VAL CURRENT\n }\n Set I (I + 1)\n }\n \n Return MAX_VAL\n}\n\n// \u{67e5}\u{627e}\u{6570}\u{7ec4}\u{4e2d}\u{7684}\u{6700}\u{5c0f}\u{503c}\nFunc ARR_MIN(ARR) {\n Set LEN LEN(ARR)\n \n If (LEN == 0) {\n Return Null\n }\n \n Set MIN_VAL ARR[0]\n Set I 1\n \n While (I < LEN) {\n Set CURRENT ARR[I]\n If (CURRENT < MIN_VAL) {\n Set MIN_VAL CURRENT\n }\n Set I (I + 1)\n }\n \n Return MIN_VAL\n}\n\n// \u{8ba1}\u{7b97}\u{6570}\u{7ec4}\u{7684}\u{5e73}\u{5747}\u{503c}\nFunc ARR_AVERAGE(ARR) {\n Set LEN LEN(ARR)\n \n If (LEN == 0) {\n Return 0\n }\n \n Set SUM ARR_SUM(ARR)\n Return (SUM / LEN)\n}\n\n// ==================== \u{6570}\u{7ec4}\u{8fc7}\u{6ee4} ====================\n\n// \u{79fb}\u{9664}\u{6570}\u{7ec4}\u{4e2d}\u{7684} null \u{503c}\nFunc ARR_COMPACT(ARR) {\n Set RESULT []\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n Set ITEM ARR[I]\n If (ITEM != Null) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{8fc7}\u{6ee4}\u{51fa}\u{6570}\u{7ec4}\u{4e2d}\u{7684}\u{6570}\u{5b57}\nFunc ARR_FILTER_NUMBERS(ARR) {\n Set RESULT []\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n Set ITEM ARR[I]\n Set ITEM_TYPE TYPE(ITEM)\n If (ITEM_TYPE == \"Number\" || ITEM_TYPE == \"Fraction\") {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{8fc7}\u{6ee4}\u{51fa}\u{6570}\u{7ec4}\u{4e2d}\u{7684}\u{5b57}\u{7b26}\u{4e32}\nFunc ARR_FILTER_STRINGS(ARR) {\n Set RESULT []\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n Set ITEM ARR[I]\n Set ITEM_TYPE TYPE(ITEM)\n If (ITEM_TYPE == \"String\") {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{6bd4}\u{8f83} ====================\n\n// \u{68c0}\u{67e5}\u{4e24}\u{4e2a}\u{6570}\u{7ec4}\u{662f}\u{5426}\u{76f8}\u{7b49}\nFunc ARR_EQUALS(ARR_1, ARR_2) {\n Set LEN_1 LEN(ARR_1)\n Set LEN_2 LEN(ARR_2)\n \n If (LEN_1 != LEN_2) {\n Return False\n }\n \n Set I 0\n While (I < LEN_1) {\n If (ARR_1[I] != ARR_2[I]) {\n Return False\n }\n Set I (I + 1)\n }\n \n Return True\n}\n\n// \u{83b7}\u{53d6}\u{4e24}\u{4e2a}\u{6570}\u{7ec4}\u{7684}\u{4ea4}\u{96c6}\nFunc ARR_INTERSECTION(ARR_1, ARR_2) {\n Set RESULT []\n Set LEN_1 LEN(ARR_1)\n Set I 0\n \n While (I < LEN_1) {\n Set ITEM ARR_1[I]\n If (ARR_CONTAINS(ARR_2, ITEM) && !ARR_CONTAINS(RESULT, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{83b7}\u{53d6}\u{4e24}\u{4e2a}\u{6570}\u{7ec4}\u{7684}\u{5e76}\u{96c6}\nFunc ARR_UNION(ARR_1, ARR_2) {\n Set RESULT []\n \n // \u{6dfb}\u{52a0} ARR_1 \u{7684}\u{6240}\u{6709}\u{552f}\u{4e00}\u{5143}\u{7d20}\n Set LEN_1 LEN(ARR_1)\n Set I 0\n While (I < LEN_1) {\n Set ITEM ARR_1[I]\n If (!ARR_CONTAINS(RESULT, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n // \u{6dfb}\u{52a0} ARR_2 \u{7684}\u{6240}\u{6709}\u{552f}\u{4e00}\u{5143}\u{7d20}\n Set LEN_2 LEN(ARR_2)\n Set I 0\n While (I < LEN_2) {\n Set ITEM ARR_2[I]\n If (!ARR_CONTAINS(RESULT, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{83b7}\u{53d6}\u{4e24}\u{4e2a}\u{6570}\u{7ec4}\u{7684}\u{5dee}\u{96c6}\u{ff08}\u{5728} ARR_1 \u{4e2d}\u{4f46}\u{4e0d}\u{5728} ARR_2 \u{4e2d}\u{ff09}\nFunc ARR_DIFFERENCE(ARR_1, ARR_2) {\n Set RESULT []\n Set LEN_1 LEN(ARR_1)\n Set I 0\n \n While (I < LEN_1) {\n Set ITEM ARR_1[I]\n If (!ARR_CONTAINS(ARR_2, ITEM)) {\n Set RESULT PUSH(RESULT, ITEM)\n }\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{6392}\u{5e8f}\u{8f85}\u{52a9} ====================\n\n// \u{68c0}\u{67e5}\u{6570}\u{7ec4}\u{662f}\u{5426}\u{5df2}\u{6392}\u{5e8f}\u{ff08}\u{5347}\u{5e8f}\u{ff09}\nFunc ARR_IS_SORTED(ARR) {\n Set LEN LEN(ARR)\n \n If (LEN <= 1) {\n Return True\n }\n \n Set I 1\n While (I < LEN) {\n If (ARR[I] < ARR[I - 1]) {\n Return False\n }\n Set I (I + 1)\n }\n \n Return True\n}\n\n// ==================== \u{6570}\u{7ec4}\u{8f6c}\u{6362} ====================\n\n// \u{5c06}\u{6570}\u{7ec4}\u{8f6c}\u{6362}\u{4e3a}\u{5b57}\u{5178}\u{ff08}\u{7d22}\u{5f15}\u{4f5c}\u{4e3a}\u{952e}\u{ff09}\nFunc ARR_TO_DICT(ARR) {\n Set RESULT {}\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n Set KEY TO_STRING(I)\n Set RESULT[KEY] ARR[I]\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// \u{521b}\u{5efa}\u{6307}\u{5b9a}\u{8303}\u{56f4}\u{7684}\u{6570}\u{7ec4}\nFunc ARR_RANGE(START, END, step) {\n Set RESULT []\n \n If (step == 0) {\n Return RESULT\n }\n \n If (step > 0) {\n Set I START\n While (I < END) {\n Set RESULT PUSH(RESULT, I)\n Set I (I + step)\n }\n } Else {\n Set I START\n While (I > END) {\n Set RESULT PUSH(RESULT, I)\n Set I (I + step)\n }\n }\n \n Return RESULT\n}\n\n// \u{521b}\u{5efa}\u{586b}\u{5145}\u{6307}\u{5b9a}\u{503c}\u{7684}\u{6570}\u{7ec4}\nFunc ARR_FILL(VALUE, COUNT) {\n Set RESULT []\n Set I 0\n \n While (I < COUNT) {\n Set RESULT PUSH(RESULT, VALUE)\n Set I (I + 1)\n }\n \n Return RESULT\n}\n\n// ==================== \u{6570}\u{7ec4}\u{7edf}\u{8ba1} ====================\n\n// \u{7edf}\u{8ba1}\u{67d0}\u{4e2a}\u{503c}\u{5728}\u{6570}\u{7ec4}\u{4e2d}\u{51fa}\u{73b0}\u{7684}\u{6b21}\u{6570}\nFunc ARR_COUNT(ARR, VALUE) {\n Set COUNT 0\n Set LEN LEN(ARR)\n Set I 0\n \n While (I < LEN) {\n If (ARR[I] == VALUE) {\n Set COUNT (COUNT + 1)\n }\n Set I (I + 1)\n }\n \n Return COUNT\n}\n\n// \u{7edf}\u{8ba1}\u{6570}\u{7ec4}\u{4e2d}\u{6bcf}\u{4e2a}\u{5143}\u{7d20}\u{7684}\u{51fa}\u{73b0}\u{6b21}\u{6570}\u{ff08}\u{8fd4}\u{56de}\u{5b57}\u{5178}\u{ff09}\nFunc ARR_FREQUENCY(ARR) {\n Set FREQ {}\n Set LEN_ LEN(ARR)\n Set I 0\n \n While (I < LEN_) {\n Set ITEM ARR[I]\n Set KEY TO_STRING(ITEM)\n \n If (HAS(FREQ, KEY)) {\n Set CURRENT FREQ[KEY]\n Set FREQ[KEY] (CURRENT + 1)\n } Else {\n Set FREQ[KEY] 1\n }\n \n Set I (I + 1)\n }\n \n Return FREQ\n}\n\n";Expand description
数组工具库