Assemblyscript: рдРрд░реЗ#рд╕реНрдкреНрд▓рд┐рд╕ рддрддреНрд╡ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЕрдХреНрддреВре░ 2020  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AssemblyScript/assemblyscript

рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ:

fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 0, "Lemon", "Kiwi");
fruits // == ["Banana", "Orange", "Lemon", "Kiwi", "Apple", "Mango"]

рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ AS рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:

function splice(start: i32, deleteCount?: i32): Array<T>

рдореМрдЬреВрджрд╛ рд╕рд░рдгреА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛?

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд░реНрддрдорд╛рди рдореЗрдВ AS рд╡рд┐рд╡рд┐рдз рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:

export function insertAfter<T>(arr: T[], index: i32, value: T): T[] {
  const len = arr.length + 1
  const res = new Array<T>(len)
  if (index < 0) index = len + index - 1
  if (index > len) index = len - 1
  let i = 0
  while (i < index) res[i] = arr[i++] // or use memory.copy
  res[i++] = value
  while (i < len) res[i] = arr[i++ - 1] // or use memory.copy
  return res
}

// intead fruits.splice(2, 0, "Lemon", "Kiwi") use:
fruits = insertAfter(fruits, 2, "Lemon");
fruits = insertAfter(fruits, 3, "Kiwi");

@MaxGraey рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдмреАрдЪ рдХрд┐рд╕реА рднреА рддрд░рд╣ stdlib рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдПрдХ spliceAndInsert рдХреА рддрд░рд╣ рдмрд╛рдХреА рдкреИрд░рд╛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд░рдгреА рд▓реЗ рд░рд╣рд╛ рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рд░рдгреА рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИред рд╡реИрд╕реЗ рднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЕрдиреНрдп рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд┐рд╡рд┐рдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рддрдВрддреНрд░ рдЬреЛрдбрд╝реЗрдВред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @MaxGraey

insertAfter рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЗрди-рдкреНрд▓реЗрд╕ рд╕рд░рдгреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ realloc рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛), рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

import {insertAfter} from "./insertAfter";

export function example(): string[] {
    var fruits = ["Banana", "Orange", "Apple", "Mango"];
    fruits = insertAfter(fruits, 2, "Lemon");
    fruits = insertAfter(fruits, 3, "Kiwi");
    return fruits;
}

рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ (рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд▓реЛрдбрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЬреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ getArray рддрдерд╛ getString ):

fruits_ptr = assemblyscript.module.exports.example()
// 21359280
fruits = Loader.getArray(fruits_ptr)
// (6)┬а[1152, 1184, 1312, 1616, 1216, 1248]
fruits.map(Loader.getString)
// (6)┬а["Banana", "Orange", "Lemon", "Kiwi", "Apple", "Mango"]

image

рд╣рд╛рдБ, рдирд┐рд╢реНрдЪрд┐рдд рдЙрджрд╛рд╣рд░рдгред рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдЖрдк рдЗрд╕реЗ __realloc рдФрд░ memory.copy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

pannous picture pannous  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

torch2424 picture torch2424  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MaxGraey picture MaxGraey  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

andy-hanson picture andy-hanson  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

drachehavoc picture drachehavoc  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ