1

我尝试了这段代码,如果我在多个arraylist它更新中有重复的字符串1_Maths,2_Maths

例如在multiplearraylist中我有

数学

英语

数学

印地语

英语

所以我想要o/p:

1_数学

1_英语

2_数学印地语

2_英文

我的代码是用于生成数组列表

Dim col As Integer = 0
Dim dt As New DataTable

Dim ArraySubject(0, Grd.Columns.Count - 1) As String
For i As Integer = 0 To Grd.Columns.Count - 1
   If Grd.Columns(i).Visible = True Then
      ArraySubject(0, col) = GvSearch.HeaderRow.Cells(i).Text 
      col += 1
    End If
Next

c# 中的答案也会对我有所帮助。

4

2 回答 2

2

我不太了解 VB.NET,所以这就是我认为您在 C# 中想要的:

string[] subjects = new string[] { "maths", "english", "maths", "hindi", "english" };

Dictionary<string, int> subjectCounts = new Dictionary<string, int> ();
foreach (string subject in subjects) {
    if (subjectCounts.ContainsKey(subject))
        subjectCounts[subject]++;
    else
        subjectCounts.Add(subject, 1);
}

List<string> output = new List<string>();
foreach (KeyValuePair<string, int> pair in subjectCounts) {
    if (pair.Value > 1) {
        for (int i = 1; i <= pair.Value; i++)
            output.Add(i + "_" + pair.Key);
    } else {
        output.Add(pair.Key);
    }
}

foreach (string subject in output)
    Console.WriteLine(subject);

这输出:

1_数学

2_数学

1_英语

2_英文

印地语

如果您希望它按数字排序,只需在输出之前对数组进行排序。

output.Sort();

输出:

1_英语

1_数学

2_英文

2_数学

印地语

于 2013-08-03T06:49:24.887 回答
2
private List<string> list = new List<string>();
private List<string> rslt = new List<string>();            
list.Add("math");
list.Add("science");
list.Add("math");
list.Add("science");

foreach (string i in list)
{
     rslt.Add(i);
}
foreach (string i in list)
{
     if (list.Count<string>(f => f == i) > 1)
     {
          int cnt = 1;
          int idx = 0;
          foreach (string j in list)
          {
               if (j == i)
               {
                    rslt[idx] = cnt.ToString() + "_" + j;
                    cnt++;
               }
               idx++;
           }
      }
 }
于 2013-08-03T07:16:41.957 回答