c # получение номера элемента массива - PullRequest
0 голосов
/ 08 декабря 2011

В настоящее время у меня есть два массива, один из которых хранит имя файла, а другой - размер файла.Мне нужно показать как максимальный размер файла, так и его имя.Я могу заставить его показать самый большой файл с помощью этого кода.

        long[] fileSize;
        string[] fileName;
        fileSize = new long[fileCount];
        fileName = new string[fileCount];
        for (int index = 0; index < files.Length; index++)
        {
            fileSize[index] = files[index].Length;
            fileName[index] = files[index].Name;
        }
        long largestFile = fileSize.Max();
        string latestFileName = fileName[fileSize.Max()];
        Console.WriteLine("Total size of all files: {0}", totalSize);
        Console.WriteLine("Largest file: {1}, {0}", largestFile, latestFileName );

Я пытался использовать Google, но он просто говорит мне, как определить максимальный или минимальный.

Ответы [ 4 ]

4 голосов
/ 08 декабря 2011

Нет необходимости в отдельных массивах для имени и размера, просто зациклите массив files и отслеживайте текущий максимальный размер файла и его имя в отдельных переменных.Как то так:

int max = 0;
string name = string.Empty;

for (int index = 0; index < files.Length; index++)
{
    int size = files[index].Length;
    //check if this file is the biggest we've seen so far
    if (size > max)
    {
        max = size; //store the size
        name = files[index].Name; //store the name
    }
}

//here, "name" will be the largest file name, and "max" will be the largest file size.
4 голосов
/ 08 декабря 2011

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

        var info = new Dictionary<string, long>();
        info.Add("test.cs", 24);
        var maxSize = info.Values.Max();
        Console.WriteLine(info.Single(p => p.Value == maxSize).Key);
1 голос
/ 08 декабря 2011
        var largestFiles = files.Where((f1) => f1.Length == files.Max((f2) => f2.Length));

        // it's possible that there are multiple files that are the same size and are also the largest files.
        foreach (var file in largestFiles)
        {
            Console.WriteLine("{0}: {1}", file.Name, file.Length);
        }
0 голосов
/ 08 декабря 2011

Max возвращает максимальное значение , а не максимальное значение index , поэтому поиск по индексу не работает. Вы можете попробовать это:

long largestSize = -1;
int largest = -1;
for (int index = 0; index < files.Length; index++)
{
    fileSize[index] = files[index].Length;
    fileName[index] = files[index].Name;

    if(fileSize[index] > largestSize)
    {
        largestSize = fileSize[index];
        largest = index;
    }
}

Или, как указывали другие, используйте массив Tuple<string, long>, Dictionary<string, int> (если имена файлов уникальны) или даже типы файлов, которые у вас были раньше.

...