Swift 以随机顺序迭代文件

Swift 以随机顺序迭代文件,swift,linux,random,Swift,Linux,Random,我正在用swift编写教育脚本。其目的是促进大学级统计课程中同龄人之间的合作。要求每个学生(匿名)对其同事的工作提出建议。我一直在编写的脚本可以使目录中的所有标记文件匿名化(即,删除作者和电子邮件yaml密钥),并创建包含内容的新文件,并使用电子邮件地址重命名 到目前为止,我可以从每个文件中删除作者:和电子邮件:yaml密钥,还可以重命名目录中的文件。然而,我正在努力创造一种随机文件和电子邮件的方式。关键是原始文件应该传递给另一个学生,但最后一个学生不知道作者。接收学生应随机决定。这种随机化是我

我正在用swift编写教育脚本。其目的是促进大学级统计课程中同龄人之间的合作。要求每个学生(匿名)对其同事的工作提出建议。我一直在编写的脚本可以使目录中的所有标记文件匿名化(即,删除作者和电子邮件yaml密钥),并创建包含内容的新文件,并使用电子邮件地址重命名

到目前为止,我可以从每个文件中删除
作者:
电子邮件:
yaml密钥,还可以重命名目录中的文件。然而,我正在努力创造一种随机文件和电子邮件的方式。关键是原始文件应该传递给另一个学生,但最后一个学生不知道作者。接收学生应随机决定。这种随机化是我正在努力解决的问题

MWE 这是一个linux项目,我发现创建MWE最简单的方法就是使用优秀的脚本编写脚本。代码如下:

import Yaml // marathon: https://github.com/behrang/YamlSwift.git
import Files // marathon:https://github.com/JohnSundell/Files.git
import Foundation

var email: String = ""
var document: String = ""


for file in Folder.current.files {
    guard file.extension == "md" else {
        continue
    }

    let content = try file.readAsString()
    let pattern = "(?s)(?<=---).*(?=---)"
    if let range = content.range(of: pattern, options: .regularExpression) {
        let text = String(content[range])
        let value = try! Yaml.load(text)
        email = value["email"].string!
        let author = value["author"].string!
        let emailline = "email: " + email
        let authorline = "author: " + author
        document = content.replacingOccurrences(of: "\n\(emailline)", with: "")
        document = content.replacingOccurrences(of: "\n\(authorline)", with: "")
    }  

    // Creating new file with name from email and copying contents into it
    //let folder = try Folder()
    let file = try Folder.current.createFile(named: email)
    try file.write(string: document)
}
第二个文件:

# Metadata
title: My essay
author: brauser
email: brauser@gmail.com
---
Extra text
第三个文件:

# Metadata
title: My third essay
author: bestuser
email: bestuser@gmail.com
---
Extra text
问题: 首先,我不需要代码。但代码是受欢迎的。请注意,您可以通过以下方式运行上述示例(前提是您有马拉松):

  • 我想我可以通过以随机顺序迭代目录中的文件来解决这个问题。你怎么能这么做?我的第一个想法是创建一个包含电子邮件和文件名的dict,并将这两者置乱

您需要的是一种确定的方式,将一个审阅者分配给一个同行。您可以通过创建两个地图(随机->文章)来实现这一点。按随机键对它们进行排序,并按索引匹配文章。伪代码示例:

/* Note that you may want to be sure that random keys are unique */
map reviewers = [random_integer(): article_one,
                 random_integer(): article_two,
                 ...]
map articles = [random_integer(): article_one,
                random_integer(): article_two,
                ...]
sort reviewers by key
sort articles by key
for (index in 0..length(reviewers)) {
     assign_reviewer(author_from: reviewers[index], to: articles[index])
}
marathon run lf-araujo/collab
/* Note that you may want to be sure that random keys are unique */
map reviewers = [random_integer(): article_one,
                 random_integer(): article_two,
                 ...]
map articles = [random_integer(): article_one,
                random_integer(): article_two,
                ...]
sort reviewers by key
sort articles by key
for (index in 0..length(reviewers)) {
     assign_reviewer(author_from: reviewers[index], to: articles[index])
}