-1

我正在寻找的是从 idFAV 中删除重复项,然后将其放入文本字​​段中。有任何想法吗?我正在研究 C# 2.0。

// main.cs

    public void Page_Load(object sender, EventArgs e)
    {
        Session["FAVisible"] = new ArrayList();
    }

// 分享.cs

    public void Page_Load(object sender, EventArgs e)
             {
               ArrayList idFAV = (ArrayList)Session["FAVisible"];
               idFAV.Add(FileName));
               Session["FAVisible"] = idFAV;

               for(int i=0; i < DisplayCount; i++) 
               {
                     FileAttachedVisible.Text = idFAV[i].ToString();
               }

              }
4

5 回答 5

1

如果在添加之前检查它,则不需要删除...例如:

           foreach (var iMeter in meter)
              {
                   if (!ip.Contains(iMeter.IP))
                    {
                          ip.Add(iMeter.IP);
                      }
              }
于 2014-02-27T22:42:46.317 回答
1

如果这是您使用 ArrayList 的所有地方,那么最简单的解决方法是在添加之前检查 idFAV 是否​​包含 FileName,并且您将永远不会有重复项。或者,如果此数组列表在某处被修改,那么您可以创建一个新的 Arraylist 并循环遍历 idFAV 中的所有项目,并且仅当它不存在于新列表中时才添加。

于 2013-09-23T16:28:22.527 回答
0

您可以尝试构建新的 ArrayList 并检查要添加的任何新元素是否已在该列表中。

ArrayList result = new ArrayList();

foreach(var elem in idFav)
{
   if (!result.Contains(elem))
   {
       result.Add(elem);
   }
}

当然,这个解决方案的性能并不是最好的(O(n^2))。最好尝试使用哈希集/字典并在 O(n) 中执行此操作。

此外,要使 ArrayList 中的对象工作,需要实现 Equals。如果 FileName 是字符串,则无需担心。

于 2013-09-23T16:40:44.840 回答
0

这是完成任务的一种方法。我确信它可以简化,但我想列出流程中的每一步。

// Build ArrayList
ArrayList al = new ArrayList();
al.Add(1);
al.Add(1);
al.Add(2);
al.Add(2);
al.Add(3);
al.Add(4);
al.Add(4);
al.Add(4);

// Create List from ArrayList
List<object> oList = new List<object>(al.ToArray());

// Declare holder to distinct values
List<object> distinctValues = new List<object>();

// Get distinct values
oList.ForEach(delegate(object o) {
    if (!distinctValues.Contains(o)) {
        distinctValues.Add(o);
    }
});

// Copy original list as a list with duplicates
List<object> duplicateValues = new List<object>(oList);

// Remove the first instance of each distinct value
// leaving all duplicates
distinctValues.ForEach(delegate(object o){
    duplicateValues.Remove(o);
});

// Display distinct values
foreach (object o in distinctValues) {
    MessageBox.Show(o.ToString(), "Distinct");
}

// Display duplicate values
foreach (object o in duplicateValues) { 
    MessageBox.Show(o.ToString(), "Duplicate");
}
于 2013-09-23T17:24:47.310 回答
0
using System; using System.Collections;
using System.Collections.Generic;
using System.Linq;

class Program 
{ 
static void Main() List list = new List();
Console.WriteLine("number: "); int num = int.Parse(Console.ReadLine());
while (num > 0) { list.Add(num % 10); num /= 10; } list.Reverse();
List distinct = list.Distinct().ToList();
PrintValues(distinct);
static void PrintValues(IEnumerable distinct) 
{
 foreach (object value in distinct) Console.Write("{0}", value); 
  Console.WriteLine();
} 
}
}
于 2020-04-12T12:03:15.277 回答