【问题标题】:Which javascript functions f satisfy: f(x,y) = f(a,b) IFF x = a and y = b?哪些 javascript 函数 f 满足:f(x,y) = f(a,b) IFF x = a 和 y = b?
【发布时间】:2023-03-27 19:43:02
【问题描述】:

我正在使用SlickGrid 和相关的DataView 的groupBy 功能。我想按一对列分组,但 groupBy 只允许按单个值分组。

为了解决这个问题(以 AFAICT 支持和预期的方式),我想向 DataView 传递一个函数 h(row) {return TUPLE(row.x, row.y)},其中 TUPLE 对应于该问题标题中的 f:它应该返回一个行为如下的对象关于相等性,就好像它是 TUPLE 的第一个和第二个参数的双元组:[然后 DataView 将按 h(row) 对行进行分组]

我最好的解决方案是

x.toString().replace("," by "") + "," + y.toString().replace("," by "")

更笼统地说:

  1. 选择一个分隔符字符串 S(例如,)
  2. 将每个参数转换为字符串
  3. 从每个此类字符串中删除所有出现的 S
  4. 在所有字符串之间插入 S(如 return theStrings.join(S))

我对这个解决方案的唯一抱怨是它感觉非常恶心。然而,这足以来这里询问我是否缺少某种语言习语、最佳实践或设计模式。

【问题讨论】:

  • 嗯,.replace(X by Y) 是真的吗?我在做梦吗?
  • (1) 不,那是伪代码; (2)这是一个测试:看书,看远,回头;你看到相同的图像吗?如果是,你醒了;如果没有,你在做梦。它与 sleep(8h) 调用期间大脑的 render_frame() 函数有关;-)
  • 够了,我会接受的(你能睡 8 小时 吗?!幸运的家伙)

标签: javascript design-patterns tuples equality idioms


【解决方案1】:

如果两个参数都是数字(或可以转换为数字),则可以使用配对函数。

f(x, y) = (x + y) * (x + y + 1) / 2 + y

查看更多:http://en.wikipedia.org/wiki/Pairing_function

【讨论】:

  • 简洁的链接,谢谢。用另一种方式表达我的问题:我的 hack 是 js 中最好的通用(不仅仅是数字)配对函数吗?
猜你喜欢
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
相关资源
最近更新 更多