Dictionary 有没有更好的方法在Dart中编写此数据结构?

Dictionary 有没有更好的方法在Dart中编写此数据结构?,dictionary,dart,structure,Dictionary,Dart,Structure,Dart中的地图是一个哈希表,对吗 Map starsData = { 'stars':{ 'star1': {'x': 0, 'y': 10}, 'star2': {'x': 0, 'y': 10} } }; 下面这个JavaScript对象可以作为哈希表访问,速度更快!!我只想在Dart中做一些,但我不确定是否最好的方法是使用Map const starsData = { stars:{

Dart中的地图是一个哈希表,对吗

Map starsData = {
        'stars':{   
            'star1': {'x': 0, 'y': 10},
            'star2': {'x': 0, 'y': 10}
        }
};  
下面这个JavaScript对象可以作为哈希表访问,速度更快!!我只想在Dart中做一些,但我不确定是否最好的方法是使用Map

const starsData = {
    stars:{
       'star1': {'x': 0, 'y': 10},
       'star2': {'x': 0, 'y': 10}
    }
};

我已经在Dart中重写了您的JavaScript实现(基于您链接的项目):

也可以通过以下方式进行测试:

导入'dart:html';
导入'dart:math'作为数学;
常数starsDiameter=1.25;
常数colorPallete=[
“白色”,
“黄色”,
“蓝色”,
“红色”,
“橙色”,
“绿松石”,
“紫色”,
“绿色”,
“浅蓝色”,
“浅黄色”,
“浅绿色”,
“黑暗的”,
“暗蓝色”,
“darkorange”,
“黑松石”,
“黑绿色”
];
final math.Random _rnd=math.Random();
int getRandomNumber(int-min,int-max)=>min+\r.nextInt(max-min);
班级明星{
int x,y;
int positionX=getRandomNumber(2650);
int positionY=getRandomNumber(3125);
双直径=标准直径;
int脉冲=0;
int闪烁=0;
int timeToFall=getRandomNumber(07500);
int-velocityToFall=getRandomNumber(1,5);
int directionToFall=getRandomNumber(-1,1);
字符串颜色=colorPallete[getRandomNumber(0,colorPallete.length)];
星(){
x=位置x;
y=位置y;
}
}
最终列表stars=List.generate(175,()=>Star());
无效更新(){
for(星号中的最终当前星号){
最终currentTimeToFall=currentStar.timeToFall;
如果(currentTimeToFall!=0){
currentStar.timeToFall=currentTimeToFall-1;
}否则{
最终currentVelocityToFall=currentStar.velocityToFall;
最终currentAngleToFall=currentStar.directionToFall;
最终currentPositionX=currentStar.x;
最终电流位置y=电流星形y;
currentStar.x=当前位置x+1*当前角度球;
currentStar.y=当前位置y+当前速度下降;
}
}
}
final CanvasElement canvas=querySelector(“#canvas”)作为CanvasElement;
最终CanvasRenderingContext2D=canvas.context2D;
空星(){
context2D.clearRect(
0,0,context2D.canvas.width,context2D.canvas.height);//清除画布
for(星号中的最终当前星号){
context2D.beginPath();
context2D.fillStyle=currentStar.color;
弧(currentStar.x,currentStar.y,starsDiameter,0,2*math.pi);
context2D.fill();
context2D.closePath();
}
}
void animateLoop([num highResTime]){
更新();
drawStars();
window.requestAnimationFrame(animateLoop);
}
void main(){
animateLoop();
}
通过查看您的代码,我看不出为什么星星应该保存在地图或其他哈希表相关结构中。您以两种方式使用星星:绘制和更新。在这两种情况下,您只需要遍历所有的星星,这可以通过使用一个简单的列表并迭代所有元素来完成


我应该补充一点,我不是一个前端程序员,我不能真正判断您绘制2D画布的方式是否是最有效的方式。我转换的代码只是试图展示如何在Dart中构造数据。

我编辑了我的问题。我希望你能理解我需要什么。但是我用课堂写下了你的例子。我真的很抱歉,我已经试过多次试图从你的问题中得到任何意义,但是我找不到任何关于你试图完成什么的线索。您提到了哈希表,但没有说明如何访问对象。请提供一个示例,说明您想要做什么,并说明您自己提出的解决方案不起作用的原因。你想不想通过名字访问一颗星星?非常感谢!!别担心!!使用哈希表查看我在JS中的完整代码:更新了我的答案JuleMand101,这对我很有用。昨天,我使用Ameiva Lib编写了一个版本的FallingStars,我开始这个项目只是为了学习创建Dart Lib和管理项目。如果你想合作就好!!!这是我的FallingStars版本:
import 'dart:html';
import 'dart:math' as math;

const starsDiameter = 1.25;

const colorPallete = [
  'white',
  'yellow',
  'blue',
  'red',
  'orange',
  'turquoise',
  'purple',
  'green',
  'lightblue',
  'lightyellow',
  'lightgreen',
  'darkred',
  'darkblue',
  'darkorange',
  'darkturquoise',
  'darkgreen'
];

final math.Random _rnd = math.Random();
int getRandomNumber(int min, int max) => min + _rnd.nextInt(max - min);

class Star {
  int x, y;

  int positionX = getRandomNumber(2, 650);
  int positionY = getRandomNumber(3, 125);
  double diameter = starsDiameter;

  int pulsing = 0;
  int blinking = 0;

  int timeToFall = getRandomNumber(0, 7500);
  int velocityToFall = getRandomNumber(1, 5);
  int directionToFall = getRandomNumber(-1, 1);

  String color = colorPallete[getRandomNumber(0, colorPallete.length)];

  Star() {
    x = positionX;
    y = positionY;
  }
}

final List<Star> stars = List.generate(175, (_) => Star());

void update() {
  for (final currentStar in stars) {
    final currentTimeToFall = currentStar.timeToFall;

    if (currentTimeToFall != 0) {
      currentStar.timeToFall = currentTimeToFall - 1;
    } else {
      final currentVelocityToFall = currentStar.velocityToFall;
      final currentAngleToFall = currentStar.directionToFall;

      final currentPositionX = currentStar.x;
      final currentPositionY = currentStar.y;

      currentStar.x = currentPositionX + 1 * currentAngleToFall;
      currentStar.y = currentPositionY + currentVelocityToFall;
    }
  }
}

final CanvasElement canvas = querySelector('#canvas') as CanvasElement;
final CanvasRenderingContext2D context2D = canvas.context2D;

void drawStars() {
  context2D.clearRect(
      0, 0, context2D.canvas.width, context2D.canvas.height); // Clear canvas

  for (final currentStar in stars) {
    context2D.beginPath();
    context2D.fillStyle = currentStar.color;
    context2D.arc(currentStar.x, currentStar.y, starsDiameter, 0, 2 * math.pi);
    context2D.fill();
    context2D.closePath();
  }
}

void animateLoop([num highResTime]) {
  update();
  drawStars();
  window.requestAnimationFrame(animateLoop);
}

void main() {
  animateLoop();
}