столкнулся с проблемой. Необходимо сделать сортировку, подсчет и удаление повторяющихся элементов(только после подсчета) внутри группы. Есть входная последовательность, скажем"(aaa aa bbb bb ddd dd)". Необходимо сделать группы, ключ будет первая буква строки. Это все сделал посредством Split и LINQ
String[] s = list[0].ToLower().Split(new char[] { ' ', '.', ',' }, StringSplitOptions.RemoveEmptyEntries);
var words = s.GroupBy(t => t.Substring(0, 1)).Select(alf => new { Name = alf.Key, Count = alf.Count(), Full = alf.Select(t => t) }).OrderBy(alf=>alf.Name);
Подскажите, как работать с данными внутри группы.
Пример входной последовательности:
aAaa aa vvv vv aaaa bbBb, vvv. D vvv dd
Пример выходной последовательности
a
aaaa 2
aa 1
b
bbbb 1
d
d 1
dd 1
v
vvv 3
vv 1
Вам нужна по сути группировка внутри групп, ничего сложного, но получается чуть более громоздко и надо чуть больше держать в голове и быть внимательным:
var source = "aAaa aa vvv vv aaaa bbBb, vvv. D vvv dd";
var words = source.ToLower().Split(" .,".ToCharArray(),
StringSplitOptions.RemoveEmptyEntries);
var groups = words.GroupBy(w => w[0])
.Select(g => new {
key = g.Key,
content = g.GroupBy(w => w)
.Select(c => new { word = c.Key, count = c.Count() })
//.OrderByDescending(b => b.word.Length)
.ToList()
})
.OrderBy(a => a.key)
.ToList();
foreach (var a in groups)
{
Console.WriteLine(a.key);
foreach (var b in a.content)
{
Console.WriteLine(b.word + " " + b.count);
}
}
Можно сделать то же самое, но чуть чуть попроще
var result = words.GroupBy(x=>x).GroupBy(x=>x.Key[0]).OrderBy(x=>x.Key);
foreach(var r in result)
{
Console.WriteLine(r.Key);
foreach(var g in r)
{
Console.WriteLine($"{g.Key} {g.Count()}");
}
}
Как подключить файл для чтения через консоль, чтобы не в коде передавать адрес файла
Сайт на движке, но не магазин, поэтому готовый модуль использовать не получится, обратился к документации, API v3 (новые площадки подключаются...
Вообщем есть проект на yii2 и там выводятся пользователи в gridview