gpt4 book ai didi

dart - 我如何使用Dart获得与JSON最接近的匹配

转载 作者:行者123 更新时间:2023-12-03 04:54:39 24 4
gpt4 key购买 nike

我有一个JSON数据

String sampledata =  '{
"data1": {"x": 50,"y": 100,"z": 120},
"data2": {"x": 60,"y": 70,"z": 80},
"data3": {"x": 50,"y": 60,"z": 100}
}';

我想与此进行比较
int x = 51;
int y = 102;
int z = 120;

结果应该是data1
如何用 Dart 实现这一目标?

到目前为止我尝试过的
void findClosest(double x,double y,double z){
final Map<String, dynamic> data = json.decode(sampledata.toString());
data.forEach((key, value) {
if(ap1 < value["x"])
if(ap2 < value["y"])
if(ap2 < value["z"])
print(key);
});
}

最佳答案

您计算距离的方法是错误的。您应该改为计算两点之间的距离,例如:
https://www.mathsisfun.com/algebra/distance-2-points.html

也可以在dart:math中找到2D点:https://api.dart.dev/stable/2.7.1/dart-math/Point/distanceTo.html

基于此,我提出了以下解决方案:

import 'dart:math';

class Point3D {
final String name;
final int x, y, z;

const Point3D(this.name, this.x, this.y, this.z);

double distanceTo(Point3D other) {
final dx = x - other.x;
final dy = y - other.y;
final dz = z - other.z;

return sqrt(dx * dx + dy * dy + dz * dz);
}
}

void main() {
const list = [
Point3D('data1', 50, 100, 120),
Point3D('data2', 60, 70, 80),
Point3D('data3', 50, 60, 100)
];

const point = Point3D('Search', 51, 102, 120);

print(list
.reduce((e1, e2) => e1.distanceTo(point) < e2.distanceTo(point) ? e1 : e2)
.name);
// Returns: data1
}

另外,除了 forEach外,您还可以在列表上使用 reduce将每个元素彼此进行比较,并将其简化为单个元素。在这种情况下,我们希望列表中的元素的 point变量和point之间的距离最小(请注意,如果有多个具有相同距离的点,我们仍然只返回一个点。)

关于dart - 我如何使用Dart获得与JSON最接近的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60810791/

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