ARRAY_UTILS

Constant ARRAY_UTILS 

Source
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

数组工具库