gpt4 book ai didi

java - 在 Java 中将数组均匀截断到给定的长度限制

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:29:33 28 4
gpt4 key购买 nike

我得到了一个比常量整数 limit 长的数组。我需要将数组截断到长度 limit。但稍后,该数组将包含折线图的点。如果我得到很多点,甚至无法在浏览器中显示,我想“缩小”该数据。因此,我只想删除均匀分布序列中的数据条目。

我试过这个:

final Object[] array = /* some array */;
final List<Object> result = * some list */;
final int limit = /* some limit; but suppose that array.length > limit */
final double r = (array.length - limit) / (double) array.length;
double m = 0;
for (int i = 0; i < array.length; i++) {
while (m >= 1) {
m -= 1;
}
m += r;
if (m < 1) {
result.add(array[i]);
}
}

问题是:结果的长度是否总是恰好为 limit,为什么/为什么不?

最佳答案

这可能会完成工作:

public static <T> List<T> limitArray(T[] array, int limit) {
if (limit > array.length) {
return Arrays.asList(array);
}
List<T> list = new ArrayList<T>();
double stepSize = ((double) array.length - 1) / ((double) limit - 1);
double i = 0;
while (i < array.length) {
list.add(array[(int) i]);
i += stepSize;
}
return list;
}

为什么 array.length - 1limit - 1
因为第一个和最后一个元素总是相加的,剩下的会平分。
既然你说“数组将包含折线图的点”,我认为最好保留第一个和最后一个元素,以保持图表的整个宽度。

由于作为除法结果的有限精度 double,数组中的一个元素可能太少了。在这种情况下,这是一个可能的解决方案:

  • list.add(array[(int) i]) 替换为 list.add(array[(int) Math.round(i)])。请注意,这样做还会影响要添加到列表中的数组的其他索引。

旧答案:
你为什么不这样做呢?:

public <T> List<T> limitArray(T[] array, int limit) {
List<T> list = new ArrayList<T>();
int i = 0;
while (i < arrary.length && i < limit) {
list.add(array[i]);
i++;
}
return list;
}

关于java - 在 Java 中将数组均匀截断到给定的长度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27928238/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com