0

C# の文字列リスト内の重複する要素にインデックスを追加するアルゴリズムについて助けが必要です。

すなわち

A, B, C, D, A, B, E, F, A

となります

A, B, C, D, A (1), B (1), E, F, A (2)
4

3 に答える 3

2
Dictionary<char,int> counts = new Dictionary<char,int>();

foreach (char c in myCharArray)
{
if (counts.Keys.Contains(c))
{
counts[c]++;
myOutputList.Add(c + "(" + counts[c] + ")");
}
else 
{
counts.Add(c,0);
}

}

追加した:

私が基本的に行っていることは、一度に 1 文字ずつ配列を通過することです。私は辞書に「各文字を見た回数」のカウントを保持しています。これは、新しい文字を見るたびに増加します。

すでに見たものを見つけたら、要求に応じて括弧内に番号を追加します。

于 2012-10-25T13:40:20.523 に答える
1

Lamba/LINQの使用

  string x = "A, B, C, D, A, B, E, F, A";
  x = x.Replace(" ", "").Replace(",", ""); //Remove the spaces and commas
  var l = x.Select((v, i) => String.Format("{0}({1})", v, x.Substring(0, i).Count(c => c.Equals(v))));

  var s = l.Select(c=>c.Replace("(0)","")).ToArray();
  string result = String.Join(", ", s);
于 2012-10-25T14:24:15.130 に答える
0
var strings = new string[] { "A", "B", "C", "D", "A", "B", "E", "F", "A" };

Dictionary<string, int> counts = new Dictionary<string, int>();
for (int i = 0; i < strings.Length; ++i)
{
    if (counts.ContainsKey(strings[i]))
        strings[i] = string.Format("{0} ({1})", strings[i], counts[strings[i]]++);
    else
        counts.Add(strings[i], 1);
}
于 2012-10-25T13:46:17.550 に答える