小编Lan*_*ard的帖子

如何使用bitmasks在JavaScript中存储布尔值

在阅读有关如何使用bitmasks存储布尔值后,我有点困惑.我想有一组布尔值,然后为每个值组合生成一个唯一的整数.以下是目前的系统:

var a = 1 << 1
var b = 1 << 2
var c = 1 << 3
var d = 1 << 4

var uniqueint1 = getInt(true, false, false)
var uniqueint2 = getInt(true, true, false)
var uniqueint3 = getInt(true, true, true)
// ...

function getInt(x, y, z) {
  var value = a
  if (x) value = value | b
  if (y) value = value | c
  if (z) value = value | d
  return value
}
Run Code Online (Sandbox Code Playgroud)

但问题是,我不确定我是否应该按照以下方式处理"不"的情况:

function …
Run Code Online (Sandbox Code Playgroud)

javascript bitmask

2
推荐指数
1
解决办法
626
查看次数

如何将树结构展平为数组数组

给定这样的结构:

var node = { children: [] }
Run Code Online (Sandbox Code Playgroud)

也就是说:

  1. 它只有children财产。
  2. 没有parent财产。
  3. 没有nextSibling财产。

如何使用自上而下的方法构建一个带有所有叶节点路径的平面数组列表:

  1. 该算法不使用任何辅助方法,仅使用纯 JavaScript。
  2. 该算法在从顶部遍历树时构建数组。

所以这是一个示例数据:

var node = {
  item: 1,
  children: [
    {
      item: 2,
      children: [
        {
          item: 3,
          children: [
            {
              item: 4,
              children: []
            },
            {
              item: 5,
              children: []
            },
            {
              item: 6,
              children: [
                {
                  item: 7,
                  children: []
                },
                {
                  item: 8,
                  children: []
                },
                {
                  item: 9,
                  children: []
                }
              ]
            } …
Run Code Online (Sandbox Code Playgroud)

javascript arrays combinations

2
推荐指数
1
解决办法
4912
查看次数

如果 v8 使用“代码”或“文本”内存类型,或者所有内容都在堆/堆栈中

在典型的内存布局中,有 4 项:

  1. 代码/文本(程序本身的编译代码所在的位置)
  2. 数据

我是内存布局的新手,所以我想知道 v8(它是一个 JIT 编译器并动态生成代码)是否将此代码存储在内存的“代码”段中,或者只是将它与其他所有内容一起存储在堆中。我不确定操作系统是否允许您访问代码/文本,因此不确定这是否是一个愚蠢的问题。

在此处输入图片说明

memory compiler-construction jit v8

2
推荐指数
1
解决办法
227
查看次数

在WebGL中将大型数组传递给统一

想知道是否可以将大型数组传递给WebGL着色器,如下所示:

// array here
uniform vec4[huge] mydynamicarray;

void main() {
  // iterate through the array here to perform processing on it,
  // then write value to gl_Position
  gl_Position = ...;
}
Run Code Online (Sandbox Code Playgroud)

然后将这样填充:

gl.uniform4fv(myarrayloc, myarray)
Run Code Online (Sandbox Code Playgroud)

我已经看到了许多如何传递这样的值的示例,例如:

gl.uniform4fv(offsetLoc, [1, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)

但是我还没有看到是否可以传递一个很大的,动态大小的数组。

这样做的原因是您可以处理2个数组:

  1. 一种是在WebGL中并行运行的向量数组。
  2. 一个就是可以为每个向量迭代的统一数组。

arrays webgl

2
推荐指数
1
解决办法
551
查看次数

Haskell中不同类型之间的关系

根据我的理解,Haskell中有4种"类型":

  • 代数数据类型 data
  • 数据类型构造函数(=data类型之后是什么; 在技术上不是类型,我不认为)
  • 输入别名 type
  • 类型与 class
  • 键入实例 instance

问题是:

  1. 如果Haskell中有更多种类型.如果是这样,有什么关系.
  2. data类型和class类型类之间的区别是什么.它们看似相似,但显然它们有一些不同的特征.与(3)相同.
  3. data类型和instance类型类实例之间的区别是什么.

我是Haskell的新手.

haskell types nomenclature

2
推荐指数
1
解决办法
159
查看次数

如何在 JavaScript 中将 ArrayBuffers 与 DataViews 一起使用

我见过的关于 ArrayBuffer 的唯一真正的教程来自HTML5Rocks。但我特别想知道如何操作单个字节。例如,Mozilla 的 ArrayBuffers 上的这个卡通显示了一个包裹在 Uint8Array 视图中的 ArrayBuffer 的图像:

在此处输入图片说明

它给人的感觉是你可以用 ArrayBuffer 做到这一点:

var x = new ArrayBuffer(10)
x[0] = 1
x[1] = 0
...
x[9] = 1
Run Code Online (Sandbox Code Playgroud)

即手动设置字节。但是我还没有看到任何关于这种功能的文档。相反,您似乎应该使用 TypedArray 组件之一或 DataView:

var x = new ArrayBuffer(100)
var y = new DataView(x)
y.setUint32(0, 1)
console.log(y.getUint32(0)) // 1
console.log(x[0]) // undefined
Run Code Online (Sandbox Code Playgroud)

但是,在使用 DataView 操作 ArrayBuffer 之后,您似乎无法直接访问 ArrayBuffer 上的任何字节。

尝试使用 ArrayBuffer 和 DataView 进行其他操作时,我感到困惑:

var x = new ArrayBuffer(100)
var y = new DataView(x)
y.setUint32(0, 1)
y.setUint32(1, 2) …
Run Code Online (Sandbox Code Playgroud)

javascript bit-manipulation typed-arrays arraybuffer

2
推荐指数
1
解决办法
4068
查看次数

如何使用无记忆功能将256个唯一字符串映射到整数(0..255)

说我有串状foo,bar,baz,hello,world,等多达256个独特的字符串,所以不是很多.对于所有意图和目的,它可以很容易地是200个字符串或32个字符串.希望该解决方案可以处理任意大小的集合.

所以你取这个字符串并以某种方式将它映射到整数0-255.不做这个:

strings[currentString] = ID++
// strings['foo'] = 0
// strings['bar'] = 1
// strings['baz'] = 2
// ...
Run Code Online (Sandbox Code Playgroud)

这将取决于他们插入的顺序.理想情况下,它们可能是以某种方式从单个字符或字节的散列中唯一生成的,我不确定.但它将是一个没有内存的函数,从一组已知大小中获取任意字符串并将其映射为整数,因此更像:

// strings['foo'] = 6 + 15 + 15 = 36
// strings['bar'] = 2 + 1 + 16 = 19
// ...
Run Code Online (Sandbox Code Playgroud)

虽然这不会因为碰撞而起作用.我不知道如何设计像这样的哈希函数.所以不管怎样,别的东西都可以用来避免碰撞.

function hash(string, size) {
  // return unique integer within size
}

hash('foo', 256) // something like 123
hash('bar', 256) // something …
Run Code Online (Sandbox Code Playgroud)

javascript string algorithm hash function

2
推荐指数
1
解决办法
189
查看次数

如何在Mac上使用尖括号(如&lt;mylib.h&gt;)安装C库

如果我进入/usr/local/lib,我会看到一堆文件夹和.dylib文件,我很确定是动态链接的库文件。如果我去的话,/usr/local/include它有一堆.h文件,每个文件都有未编译的纯C源代码。

如果我在放置.h文件/usr/local/include/mylib.h,而在本地放置另一个文件.c.h文件~/Desktop/test/foo.c,则在其中foo.c可以包含mylib.h

~/Desktop/test/foo.c

#include <mylib.h>

int
main() {
  puts("Hello World");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我遵循这个,我会在终端中写这个:

$ clang -Xlinker -v
@(#)PROGRAM:ld  PROJECT:ld64-351.8
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
Library search paths:
  /usr/lib
  /usr/local/lib
Framework search paths:
  /Library/Frameworks/
  /System/Library/Frameworks/
Run Code Online (Sandbox Code Playgroud)

于是/usr/local/lib就在那里,这是一堆.dylib文件。我无法修改/usr/lib

我的问题是如何使用本地C库(例如) …

c macos linker clang

2
推荐指数
1
解决办法
175
查看次数

在哪里可以找到可下载格式的12.1中所有137,929个命名Unicode字符

我已经下载了12.1.0 unicode数据,并且在文件UnicodeData.txt中只有32,841行,因此只有〜30k个字符。想知道其他105,088个字符在哪里,但我一直找不到。想知道他们是在某个地方Unihan.zip还是在某个地方UCD.zip。我似乎在这里找不到此信息。

想知道我用什么文件结束了所有命名字符的数据库。

database unicode

2
推荐指数
1
解决办法
52
查看次数

像彩虹一样对颜色进行排序的算法

因此,我生成了随机颜色,并使用chroma.js将它们混合在一起。

在此处输入图片说明

看起来不错,因为chroma.js中的混合效果很棒。但是,请注意,图像中有两个或三个绿色斑点(或更多),以及一些紫色斑点,等等。为了使外观看起来更好,我认为在混合颜色之前先对颜色进行排序会比较好,因此更像彩虹。我想知道是否有任何方法可以做到这一点,或者是否有可能以某种方式做到这一点,我真的无法想象如何做到这一点。

就我所想是这样。对于每种颜色,计算其与6种彩虹色之一的距离。最接近红色的是第一个,然后最接近橙色的,依此类推。但是我真的不知道该怎么做,看起来很复杂。

algorithm colors

2
推荐指数
1
解决办法
103
查看次数