Создавание словаря количеств объектов в списке

Вероятно, было бы проще использовать регулярное выражение и .replace: захватить два символа в отдельных группах захвата, добавить первый символ в строку и заменить вторым символом. Затем у вас будет первая половина нужного вам вывода в одной строке, а вторая в другой: просто объедините их вместе и верните:

function encrypt(text) {
  let removedText = '';
  const replacedText1 = text.replace(/(.)(.)?/g, (_, firstChar, secondChar) => {
    // in case the match was at the end of the string,
    // and the string has an odd number of characters:
    if (!secondChar) secondChar = '';
    // remove the firstChar from the string, while adding it to removedText:
    removedText += firstChar;
    return secondChar;
  });
  return replacedText1 + removedText;
}
console.log(encrypt('This is a test!'));
[112 ]

9
задан Ryan Ische 26 March 2009 в 19:53
поделиться

4 ответа

Можно использовать пункт группы в C#, чтобы сделать это.

List<string> stuff = new List<string>();
...

var groups = from s in stuff group s by s into g select 
    new { Stuff = g.Key, Count = g.Count() };

Можно назвать дополнительные методы непосредственно также, если Вы хотите:

var groups = stuff.GroupBy(s => s).Select(
    s => new { Stuff = s.Key, Count = s.Count() });

Отсюда это - короткий транзитный участок для размещения его в a Dictionary<string, int>:

var dictionary = groups.ToDictionary(g => g.Stuff, g => g.Count);
24
ответ дан 4 December 2019 в 06:57
поделиться

Я составил бы специализированный Список, поддержанный Словарем и добавить методом протестирует на членство и увеличит количество, если найдено.

вид подобных:

public class CountingList
{
    Dictionary<string, int> countingList = new Dictionary<string, int>();

   void Add( string s )
   {
        if( countingList.ContainsKey( s ))
             countingList[ s ] ++;
        else
            countingList.Add( s, 1 );
   }
}
8
ответ дан 4 December 2019 в 06:57
поделиться

Ну, нет действительно никакого лучшего способа сделать это.

Возможно, Вы могли записать запрос LINQ, который сгруппирует строки и затем рассчитает, сколько строк там находится в каждой группе, но это не было бы почти столь же эффективно как что Вы уже имеете.

0
ответ дан 4 December 2019 в 06:57
поделиться

Одна идея состояла бы в том, чтобы дать словарю значение по умолчанию нуля, таким образом, у Вас не будет к особому случаю первого вхождения.

1
ответ дан 4 December 2019 в 06:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: