Вы пытаетесь сгруппировать элементы последовательности. LINQ имеет встроенный оператор для этого; используется как group ... by ... into ...
или эквивалентный метод .GroupBy(...)
Это означает, что вы можете написать свой код (исключая File I / O и т. Д.) Как:
var lines = new[] { "umair,i,umair", "sajid,mark,i,k,i" };
foreach (var line in lines) {
var groupedRecords =
from record in line.Split(',')
group record by record into recordgroup
from record in recordgroup
select record;
Console.WriteLine(
string.Join(
",", groupedRecords
)
);
}
Если вы предпочитаете более короткий код, цикл должен быть эквивалентно записан как:
foreach (var line in lines)
Console.WriteLine(string.Join(",",
line.Split(',').GroupBy(rec=>rec).SelectMany(grp=>grp)));
обе версии выведут ...
umair,umair,i
sajid,mark,i,i,k
Обратите внимание, что вам действительно не следует использовать Hashtable
- это просто небезопасная медленная версия Dictionary
почти для всех целей. Кроме того, приведенный вами пример вывода включает в себя символы []
и {}
- но вы не указали, как или они должны быть включены, поэтому я пропустил их.
Группа LINQ - это не что иное, как последовательность элементов (здесь идентичные строки) с ключом (здесь строка). Вызов GroupBy
, таким образом, преобразует последовательность записей в последовательность групп. Однако вы хотите просто объединить эти группы. SelectMany
является такой конкатенацией: из последовательности элементов она объединяет «содержимое» каждого элемента в одну большую последовательность.