Как я могу реорганизовать список строк на основе числа внутри указанной строки?

Я считаю, что это известно как «интернированные» строки. Python делает это, так же как и Java, а также C и C ++ при компиляции в оптимизированных режимах.

Если вы используете две идентичные строки, вместо того, чтобы тратить память на создание двух строковых объектов, все интернированные строки с одинаковыми содержимое указывает на одну и ту же память.

Это приводит к тому, что оператор Python «is» возвращает True, потому что две строки с тем же содержимым указывают на один и тот же строковый объект. Это также произойдет в Java и в C.

Это полезно только для экономии памяти. Вы не можете полагаться на него, чтобы проверить равенство строк, потому что различные интерпретаторы, компиляторы и JIT-механизмы не всегда могут это сделать.

0
задан Dubellest 15 January 2019 в 21:04
поделиться

1 ответ

Я делаю несколько предположений, поскольку вы не обновили свой вопрос, но предполагаете, что строка файла содержит строки в формате: "Score: [score] ~[Name] -- Timer: [mm:ss] -- [numCorrect]/41", а score - это double, а numCorrect - int (вы не показываете, откуда они берутся), вот один из способов справиться с этой ситуацией.

Во-первых, создайте класс со свойствами, которые вы хотите сохранить, который может создавать собственный экземпляр из строки (строки файла) и выводить себя в виде строки (для записи в файл):

[ 110]

Затем создайте метод, который может создать экземпляр этого класса из данных вашей формы:

// Not sure where these come from so created these class fields
private const string Path = @"f:\public\temp\score.txt";
private double score = 0;
private int numCorrect = 0;

private static Result GetResultFromFormData()
{
    return new Result
    {
        Score = score,
        Name = textBox1.Text,
        Time = TimeSpan.ParseExact(label9.Text, @"mm\:ss", CultureInfo.InvariantCulture),
        CorrectCount = numCorrect)
    };
}

Теперь мы можем заполнить список этих классов как из содержимого файла, так и из формы. Затем мы можем отсортировать список, используя Linq в любом поле, которое мы хотим (в данном случае Score), и можем записать отсортированный список обратно в файл:

private void button1_Click(object sender, EventArgs e)//Submit Button
{
    if (isDone)
    {
        // Create a list of results from our file
        List<Result> existingResults = File.ReadAllLines(Path).Select(Result.Parse).ToList();

        // Add a new result to the list from the form data
        existingResults.Add(GetResultFromFormData());

        // Sort the list on the Score property
        existingResults = existingResults.OrderBy(result => result.Score).ToList();

        // Write the sorted list back to the file
        File.WriteAllLines(Path, existingResults.Select(result => result.ToString()));
    }
}

Теперь файл содержит его исходное содержимое плюс новый результат из формы, отсортированный по Score.

0
ответ дан Rufus L 15 January 2019 в 21:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: