Я считаю, что это известно как «интернированные» строки. Python делает это, так же как и Java, а также C и C ++ при компиляции в оптимизированных режимах.
Если вы используете две идентичные строки, вместо того, чтобы тратить память на создание двух строковых объектов, все интернированные строки с одинаковыми содержимое указывает на одну и ту же память.
Это приводит к тому, что оператор Python «is» возвращает True, потому что две строки с тем же содержимым указывают на один и тот же строковый объект. Это также произойдет в Java и в C.
Это полезно только для экономии памяти. Вы не можете полагаться на него, чтобы проверить равенство строк, потому что различные интерпретаторы, компиляторы и JIT-механизмы не всегда могут это сделать.
Я делаю несколько предположений, поскольку вы не обновили свой вопрос, но предполагаете, что строка файла содержит строки в формате: "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
.