C# の文字列リスト内の重複する要素にインデックスを追加するアルゴリズムについて助けが必要です。
すなわち
A, B, C, D, A, B, E, F, A
となります
A, B, C, D, A (1), B (1), E, F, A (2)
C# の文字列リスト内の重複する要素にインデックスを追加するアルゴリズムについて助けが必要です。
すなわち
A, B, C, D, A, B, E, F, A
となります
A, B, C, D, A (1), B (1), E, F, A (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 文字ずつ配列を通過することです。私は辞書に「各文字を見た回数」のカウントを保持しています。これは、新しい文字を見るたびに増加します。
すでに見たものを見つけたら、要求に応じて括弧内に番号を追加します。
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);
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);
}