j - 将数字视为数组
问题描述
据我所知,J中的数字是不可能进行数组运算的;例如
NB. In J, this won't work:
m =: 234
+/ m
9
*/ m
24
由于我不能直接这样做,有没有办法将一个数字分成一个列表并再次返回,像这样?:
splitFunction 234
2 3 4
+/ (splitFunction 234)
9
|. (splitFunction 234)
4 3 2
concatenateFunction (4 3 2)
432
如果不可能,有没有办法将数字变成字符串,然后再返回?(因为 J 将字符串视为字符数组)例如
|. (toString 234)
432
解决方案
好吧,这里有一点要解开您的期望。让我们从
m=:234 NB. m is the integer 234
+/ m NB. +/ sums across the items - only item is 234
234
*/ m NB. */ product across the items - only item is 234
234
因此,整数 234 的数字(即 2 3 4)和 234 是一个原子,它只有一个值为 234 的项目的事实之间似乎存在混淆。
从那开始,您可以使用它来解构您的整数,该整数由Base ( )10 & #. ^: _1
的逆 ( ) 和一个 left 参数组成,该参数允许在 base 中完成分解。J 反转原语的方法是使用幂连词 ( ) 提升到负数 1 ( )^:_1
#.
10
10
^:
_1
splitFunction =: 10 & #.^:_1
concatenateFunction =: 10 & #.
splitFunction 234
2 3 4
+/ splitFunction 234
9
*/ splitFunction 234
24
|. splitFunction 234
4 3 2
concatenateFunction 2 3 4
234
concatenateFunction splitFunction 234
234
我认为这会做你想做的事,但你可能想花更多时间思考你期望+/ 234
做什么以及这是否是有用的行为。
推荐阅读
- python - 由于'tornado.web'没有属性'异步',如何修复jupyter笔记本上的“500:内部服务器错误”?
- sequelize.js - Sequelize,关系和所需属性
- ms-access - MSAccess - 存储过程的多线程调用?
- c# - .net Core 仅使用 WS-Fed 进行身份验证
- javascript - 检查两个数据属性是否匹配,然后将类添加到元素
- php - PHP Acess $1 来自 preg 替换以在类函数中使用
- node.js - Gmail 式的最爱/明星功能的粗略架构是什么?
- java - Java Spring-data Mongo中的Mongo DB请求
- excel-formula - Excel 索引和匹配以将值拉入单元格
- spring - Spring数据DynamoDB分页问题