2010-06-01 2 views
0

Я читаю txt-файл для строк, представляющих целые числа. Файл ограничен пространством. Я создал массив [10,2]. Каждый раз, когда строки 1 ~ 10 находятся в файле, я увеличиваю массив [n, 0] на 1. Я также подаю массив [n, 1] с цифрами 1 ~ 10.Получить верхние n-ые значения из прямоугольного массива

т.е. TXT содержимое файла:

1/1/1 10/1/2001 1 1 10 2 2 3 1 5 10 word word 3 3 etc.. 
  • StreamReader считывает 1/1/1 и определяет, что это не является 1 ~ 10
  • StreamReader считывает 10/1/2001 и определяет, что это не 1 ~ 10
  • StreamReader считывает 1 и ++ массив [0,0]
  • StreamReader считывает 1 и ++ массив [0,0]
  • StreamReader считывает 10 и ++ массив [9,0 ]
  • и т.д ..

результат будет:

  • '1' было найдено 3 раза
  • '2' было найдено 2 раза
  • '3' было найдено 3 раз
  • '5' было найдено 1 раз
  • '10' было найдено 2 раза

Моя проблема заключается в том, что мне нужен этот массив помещается в порядке (отсортированный) по значению столбца 0 так, что это будет:

1 
3 
2 
10 
5 

2-й столбец в массиве, так что я могу сказать, что в оригинал (строка, которая была найдена больше всего) была. пример: массив [0,0] = 5 // количество раз «1» найдено в txt-файле array [0,1] = 1 // это так я знаю после сортировки, что массив [0, 0] значение было для '1' array [1,0] = 10 // количество раз '2' найдено в txt-файле array [1,1] = 2 // это так я знаю после сортировки что значение массива [1,0] было для «2»

до того, как у меня был только один разделительный массив. Когда я отсортировал массив, я не знал, что такое исходное значение массива [0], поэтому я решил создать массив rec, чтобы массив [0,1] переключался с 1 на 2, поэтому я мог знать, какая строка фактически показывает больше всего. делает ли это больше с тех пор?

+0

@jball В наших редакциях было впечатляющее количество совпадений, несмотря на все спотыкающиеся друг с другом –

+0

@Michael Mrozek Да, я только что заметил, что :) SO должен реализовать сообщение «этот пост был изменен другим пользователем» к тому, что они делают для ответов. – jball

+1

@jball Вы получите предупреждение во время редактирования, если кто-то еще сохранит, но это займет минуту, поэтому обычно вы отправляете до того, как это произойдет –

ответ

0

В качестве предположения, возможно, вы можете использовать словарь int для int. Таким образом, вы могли бы поддерживать n цифровых значений (а не фиксированный диапазон). Хотя я не уверен, что понимаю, что еще хранит второе измерение массива?

Чтобы вывести их в порядке, используя текущее решение, предполагая, что ваш многоа массированный массив называется _countsIndexedByValues;

var orderedCounts = _countsIndexedByValues.Select((innerArr, i) => new { Count = innerArr[0], Value = i}).OrderBy(u => u.Count); 
orderCounts.ToList().ForEach(u => Console.Out.WriteLine(String.Format("'{0}' was found {1} times", u.Value, u.Count); 

Это делает использование как LINQ и анонимные типы ... Где я использовал анонимный тип, который вы могли бы использовать пару или что-то еще вы хотите.

+0

PS. Вместо того, чтобы делать .ToList() ForEach() можно, конечно, использовать свой собственный цикл Еогеаспа или аналогичный метод расширения ForEach применять общие действия:. государственной статической силы ForEach (это IEnumerable источника, действие действия) { foreach (элемент в источнике) action (item); } – Reddog

+0

способ узнать, что такое исходное значение массива [0,0], поэтому я решил создать массив rec, чтобы массив [0,1] переключился с 1 на 2, чтобы я мог знать, какая строка действительно отображается большинство. делает ли это больше с тех пор? – user355925

+0

@ user355925 - Хмммм, если это так, то вы можете определенно отказаться от второго измерения, так как вы можете либо разрешить его из индекса исходного массива (т.е. value = index + 1), а затем, когда дело доходит до сортировки, вы можете использовать либо анонимный тип, либо какая-то тривиальная структура (например, пара или KeyValuePair ). – Reddog

Смежные вопросы