如何检查所有Dict元素是否符合Elm中的某个标准?

时间:2015-10-27 21:02:50

标签: dictionary elm

在Javascript中,要检查所有哈希元素是否满足某个条件,可以这样做:

var dict = {
  elm: 4,
  language: 7,
  is: 3,
  awesome: 11
};

function allEven(dict) {
  for (var key in dict) {
    if (dict[key] % 2 === 1) {
      return false;
    }
  }

  return true;
}

console.log(allEven(dict));

这里的要点是我们尽快停止计算。

不幸的是,我在Elm中找不到Dict.all函数。

我想另一种选择是将Dict转换为List并使用List.all。但是,如果可能的话,我想避免创建List

你如何在Elm中实现这种短路机制?

1 个答案:

答案 0 :(得分:1)

一般来说,我们只是使用folds构建这些函数:

import Dict

dictAll : (comparable -> Bool) -> Dict.Dict comparable b -> Bool
dictAll predicate = 
  Dict.foldr (\key _ soFar -> soFar && predicate key) True

这将遍历字典中的每个元素,并检查它是否符合谓词,并且所有先前的元素都符合谓词。

你可以用“任意”做同样的事情,将True改为False,将&&改为||