小编All*_*mis的帖子

Haskell - 使用foldr的MinMax

我正在寻找一个Haskell函数,它将一个列表作为参数并返回一个元组(min,max),其中min是列表的最小值,max是最大值.

我已经有了这个:

maxMinFold :: Ord a => [a] -> (a, a)
maxMinFold list = foldr (\x (tailMin, tailMax) -> (min x tailMin) (max x tailMax)) -- missing part
Run Code Online (Sandbox Code Playgroud)

你能帮我解决一下缺失的部分吗?(或者告诉我我做错了什么)

非常感谢

haskell

1
推荐指数
1
解决办法
1729
查看次数

插入到Map中的值不会保留在循环的第二个循环中

下面的功能将具有给定扩展名的所有文件从rootDirectory复制到给定目标.当文件的名称不同时,它运行良好,但是当有两个具有相同名称的文件时(请参阅recurvive调用 - 它可以在子目录中),它不会执行应有的操作.如果有更多具有相同名称的文件,则应复制这两个文件并重命名第二个文件(将_1,_2,...添加到其名称中).

我看到我正在使用的Map可能存在问题 - 每次复制文件时,我都要保存它的名称并添加计数器,计算它被复制的次数(因此可以将相应的数字添加到其名称中) ).你能帮我解决一下这个问题吗?

void copy(File rootDirectory, String destination, String fileExtension) {
    File destFile = new File(destination);
    HashMap<String, Integer> counter = new HashMap<>();
    for (File file : rootDirectory.listFiles()) {
        try {
            if (file.isDirectory()) { copy(file, destination, fileExtension);
            } else if (getExtension(file.getPath().toLowerCase()).equals(fileExtension.toLowerCase())) { 
                if (!destFile.exists()) { destFile.mkdirs();}
                String fileName = file.getName();
                if(counter.containsKey(fileName)){  // <<-- IS NEVER TRUE 
                    int count = counter.get(fileName);
                    count++;
                    counter.put(fileName, count);
                    int i = fileName.contains(".") ? fileName.lastIndexOf('.') : fileName.length();
                    fileName = fileName.substring(0, i) + "_" …
Run Code Online (Sandbox Code Playgroud)

java dictionary hashmap

0
推荐指数
1
解决办法
29
查看次数

标签 统计

dictionary ×1

hashmap ×1

haskell ×1

java ×1