提问人:Sandra K 提问时间:9/27/2017 最后编辑:CommunitySandra K 更新时间:9/27/2017 访问量:40
如何为所有对象设置类别
How to set a category to all objects
问:
我有固定数量的类别:
1、2 和 3
我在一个数组中有 N 个元素。
我想设置每个元素的类别,其中前三分之一为 = 3,第二个三分之一为 = 2,后三分之一为 = 1。
我正在使用这个不起眼的代码:
for(let i = 0; i < data.length / 3 - 1; i++) // set first 3rd
data[i].category = 3;
for(let j = parseInt(data.length / 3); j < (data.length * 2)/3 - 1; j++) // set 2nd third
data[i].category = 2;
for(let k = parseInt((data.length * 2)/3); k < data.length; k++) // set 3rd third
data[i].category = 1;
但这并不能给出准确的结果,尤其是当 N < 3 时。
如果 N < 3,我想要:
如果 N=1,则将其设置为 3
如果 N=2,则将第一个元素设置为 3,将第二个元素设置为 2
如果 N=3,则将 first 设置为 3,将 second 设置为 2,将 second 设置为 1
如果 N=4,则将 first 设置为 3,将 second 设置为 2,将 last 2 设置为 1
如果 N=5,则将 first 设置为 3,将 second 设置为 2,将 last 2 设置为 1
如果 N=6,则拆分为三分之二,并为每对分配一个类别
..等
因此,如果 N 为奇数,则最后一项属于类别 = 1(最后一个类别)...等。但混淆是当 N 是奇数而 N-1 不能被 3 整除时(例如 N=11:我希望第一个 3 是 3,然后 4 是 2,最后 4 是 1)。或者当 N 是偶数但不能被 3 整除时(例如 N=8:我希望第一个 2 是 3,然后 3 是 2,最后一个 3 是 1)
我怎样才能做到这一点?解决方案可以是任何编程语言,然后我会将其转换为javascript
答:
也许这点 Python 会有所帮助:
def f(n):
q,r = divmod(n,3) #quotient and remainder
a = q
b = q + (1 if r == 2 else 0)
c = q + (1 if r > 0 else 0)
return (a,b,c)
用于:
>>> for N in range(1,15): print(N, "=>",f(N))
1 => (0, 0, 1)
2 => (0, 1, 1)
3 => (1, 1, 1)
4 => (1, 1, 2)
5 => (1, 2, 2)
6 => (2, 2, 2)
7 => (2, 2, 3)
8 => (2, 3, 3)
9 => (3, 3, 3)
10 => (3, 3, 4)
11 => (3, 4, 4)
12 => (4, 4, 4)
13 => (4, 4, 5)
14 => (4, 5, 5)
请注意,这与 C 语法语言类似。(1 if r == 2 else 0)
r == 2 ? 1 : 0
输出的解释是数组中的第一个元素设置为等于,下一个元素设置为等于,最后一个元素设置为等于。你的问题似乎是如何获得这种分裂方式.(i,j,k)
i
3
j
2
k
3
N
评论
divmod
同时计算整数商和余数,so 和q = int(n/3)
r = n%3
您可以对小数组进行校正并计算所需部分的值。
var array = [
[1],
[1, 2],
[1, 2, 3],
[1, 2, 3, 4],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 7],
[1, 2, 3, 4, 5, 6, 7, 8],
],
result = array.map(aa => aa.map(
(_, i, a) => (a.length < 3 && 3 - a.length) + (i < Math.floor(a.length / 3) ? 3 : 1 + (i < Math.floor(2 * a.length / 3)))
));
console.log(result.map(a => JSON.stringify(a)));
.as-console-wrapper { max-height: 100% !important; top: 0; }
下一个:确定浮点数中的前导零数
评论