检查两个列表中的相同元素

时间:2013-08-15 12:20:28

标签: c# asp.net list c#-2.0 listitem

我有一个List和一个ListItemCollection,想要检查是否有相同的元素。

首先,我使用Text和Value填充ListItemCollection。 (在SQL选择之后)

ListItemCollection tempListName = new ListItemCollection();
ListItem temp_ListItem;

    if (reader.HasRows)
    {
       while (reader.Read())
       {
          temp_ListItem = new ListItem(reader[1].ToString(), reader[0].ToString());
          tempListName.Add(temp_ListItem);
       }
    }

我有List

List<string> tempList = new List<string>(ProfileArray);

有一些值,如{“1”,“4”,“5”,“7”}

现在,我想检查一下,如果tempList可能有一些在tempListName中具有相同值的元素,并从值adn中读取文本,请将其写入新列表。

注意:我使用的是asp.net 2.0。

4 个答案:

答案 0 :(得分:4)

List.FindAll已在C#2.0中提供:

List<string> newList = tempList.FindAll(s => tempListName.FindByText(s) != null);

ListItemCollection.FindByText

  

使用FindByText方法在集合中搜索ListItem   Text属性,等于text参数指定的文本。这个   方法执行区分大小写和文化不敏感的比较。   此方法不执行部分搜索或通配符搜索。如果   使用此条件在集合中找不到项目, null为   返回

答案 1 :(得分:1)

真正简单的解决方案,您可以根据自己的需要进行自定义和优化。

List<string> names = new List<string>(); // This will hold text for matched items found
foreach (ListItem item in tempListName)
{
    foreach (string value in tempList)
    {
        if (value == item.Value)
        {
            names.Add(item.Text);
        }
    }
}

答案 2 :(得分:0)

因此,对于一个真实的简单示例,请考虑以下内容:

List<string> tempTextList = new List<string>();

while (reader.Read())
{
    string val = reader[0].ToString(),
        text = reader[1].ToString();

    if (tempList.Contains(val)) { tempTextList.Add(text); }

    temp_ListItem = new ListItem(text, val);
    tempListName.Add(temp_ListItem);
}

现在,只是列出一些文本值对你来说不是很好,所以让我们稍微改进一下:

Dictionary<string, string> tempTextList = new Dictionary<string, string>();

while (reader.Read())
{
    string val = reader[0].ToString(),
        text = reader[1].ToString();

    if (tempList.Contains(val)) { tempTextList.Add(val, text); }

    temp_ListItem = new ListItem(text, val);
    tempListName.Add(temp_ListItem);
}

现在,您可以从字典中找到特定值的文本。您甚至可能希望在更高的范围内声明Dictionary<string, string>并在其他地方使用它。如果您要在更高的范围内声明它,您只需更改一行,即:

Dictionary<string, string> tempTextList = new Dictionary<string, string>();

到此:

tempTextList = new Dictionary<string, string>();

答案 3 :(得分:0)

        var resultList = new List<string>();
        foreach (string listItem in tempList)
            foreach (ListItem listNameItem in tempListName)
                if (listNameItem.Value.Equals(listItem))
                    resultList.Add(listNameItem.Text);