ArrayList не очень подходит для этой задачи, и фактически ArrayList больше не используются.Если кто-то говорит вам, что у вас есть , чтобы сделать это с ArrayList
Словарь был бы намного лучшим контейнером для этих данных.Вы можете использовать символ в качестве ключа, а счет в качестве значения.
Вот один из способов сделать это:
var inputPath = @"c:\temp\temp.txt";
var outputPath = @"c:\temp\results.txt";
var data = new Dictionary<char, int>();
// For each character in the file, add it to the dictionary
// or increment the count if it already exists
foreach (var character in File.ReadAllText(inputPath))
{
if (data.ContainsKey(character)) data[character]++;
else data.Add(character, 1);
}
// Create our results summary
var results = data.ToList()
.Select(item => $"{item.Key} ({(int) item.Key}) {item.Value}");
// Write results to output file
File.WriteAllLines(outputPath, results);
Если у вас есть использовать ArrayList
(который никто больше не использует, но вы говорите, что вы по какой-то причине), это было бы полезно только для сохранения результатов, но не для отслеживания количества.
В одну сторонуиспользовать ArrayList
можно в сочетании с методами расширения Linq
Distinct
и Count
(сначала для поиска всех различных символов, а затем для подсчета каждого из них):
foreach (var chr in data.Distinct())
{
al.Add($"{chr} ({(int) chr}) {data.Count(c => c == chr)}");
}