【问题标题】:Dart - How to take multiple output values and multiply with a single value?Dart - 如何获取多个输出值并与单个值相乘?
【发布时间】:2021-04-29 04:12:21
【问题描述】:

这是我在自学 Dart/Flutter/编码道路上的第一个项目。

我正在尝试制作一个动物年龄计算器。基本上,用户将从一组动物中选择一只动物并给出动物的年龄,代码将输出与其他动物的相对年龄。

我有许多带有键:值对的地图(我认为)。每个地图都有一个 k:v 对(动物及其相应的年龄比例)。例如,如果用户选择“狗”,代码将返回 dogMap 以及熊、猫、鸡、大象、人类和兔子的比率值。

我可以得到比率值,但我一直在尝试使用这些值来计算相对年龄。

这是地图-

var dogAgeRatio = {'dogTobear': 0.55, 'dogTocat': 0.88, 'dogTochicken': 1.47, 'dogToelephant': 0.31, 'dogTohuman': 0.28, 'dogTorabbit': 2.44};

这是我目前获得的值 -

if(animalName == "dog") {
    print("these are the relatve animal ages: ${dogAgeRatio.values}");

是否希望得到关于我应该如何使用这些值并应用计算来返回所有其他动物的相对年龄的指针?

提前致谢。

卡尔

【问题讨论】:

    标签: dictionary dart


    【解决方案1】:

    有不同的方法可以做到这一点,但一个简单的方法是这样的,我们有一个Map<String, Map<String, num>> 来表示我们的比较:

    import 'dart:io';
    
    void main() {
      final animalMap = {
        'dog': {
          'bear': 0.55,
          'cat': 0.88,
          'chicken': 1.47,
          'elephant': 0.31,
          'human': 0.28,
          'rabbit': 2.44
        },
        'alien': {
          'human': 100
        }
      };
    
      print('Please enter one of the following animals:');
      print('==========================================');
      animalMap.keys.forEach(print);
      print('==========================================');
    
      final animalInput = stdin.readLineSync();
      if (animalInput != null && animalMap.containsKey(animalInput)) {
        print('Enter age of animal:');
        final age = int.parse(stdin.readLineSync()!);
    
        print('Age compared to different animals:');
        print('==========================================');
        animalMap[animalInput]!.entries.forEach((element) =>
            print('${element.key} => ${element.value * age} years old.'));
        print('==========================================');
      } else {
        print('Wrong animal!');
      }
    }
    

    所以第一个关键是起始动物,子图是我们如何从起始动物年龄到子动物。

    我让我的解决方案有点互动,只是为了好玩。 :)

    【讨论】:

    • thx @julemand101,这是一个相当全面的答案。给我几个星期,我可能会明白发生了什么。我肯定会回到它,并用它来比较和改进我自己的尝试。谢谢
    • @CStep 只是说是否有部分解决方案需要我更详细地解释。是的,对于初学者来说阅读这段代码可能很困难,因为我使用了一些快捷方式来缩短代码,而这些快捷方式并不明显它是如何工作的。我还可以重写解决方案以更详细地拆分每个步骤。
    • 谢谢,你帮了大忙。我能够采用您的解决方案的一部分并(通过反复试验)适应我自己的解决方案。对我来说,这感觉像是一个小小的胜利。
    【解决方案2】:

    我不确定我的理解是否正确,但您可以使用以下内容:

    dogAgeRatio.values.forEach((element) { print(element * dogage);});
    

    这基本上会遍历地图的每个项目并打印乘以狗年龄的值。

    【讨论】:

    • @ Danzon2504 - 在提出我的问题后,我能够进一步限定我的谷歌搜索并返回类似的东西 - var selectedList = dogAgeRatio.values.toList(); - 然后是 - `for(selectedList 中的双项){ print(item * 几岁); }' - 感谢您的答复。一旦我完成了这个项目,我会尝试重新设计它以包含你的建议。再次感谢。
    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2019-01-25
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多